こんばんは。
2021/3/13に、AtCoderのABC-195に参加しました。
レートは以下の通りとなっています。
C問題は、意外と余裕をもって解けました。
しかしながらB問題が解けなかったという、初めての展開・・。
レートは230→251に更新!
Bでしくじったけどレートが下がらなくてよかった。順位は4606位となっています。
しかしこのペースだと、茶色まで半年近くかかりそうだ・・。頑張らねば。
###A問題
M、Hを入力。
HがMの倍数であればYes、でなければNoを出力。
問題文上は、モンスター云々が書いてありましたが、分かりにくくなるので割愛します。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int m = sc.nextInt();
int h = sc.nextInt();
if(h%m==0){
System.out.println("Yes");
}else{
System.out.println("No");
}
}
}
###B問題
A、B、Wを入力。
みかんが複数あり、重さがAグラム以上、Bグラム以下。
任意の個数を取り出したところ、Wキログラムになった。
ありえるミカンの最小個数、最大個数を求める。
→解けなかったです。結果を見ると、解けている人も多そう。
何か観点が足りなかったのかな。
###C問題
ある数字Nを入力。
1からNまで順番に数字を記載した時、整数入力時の桁区切り(1,000とか)のカンマを打った回数。
桁区切りは3桁ごとに行われるので、1000の累乗を求めて、
1000の0乗(1)より大きいかどうか
→1000の1乗-1(1000-1=999)まではカンマ0個を打つ。
1000の1乗(1000)より大きいかどうか
→1000の2乗-1(1,000,000-1=999,999)まではカンマ1個を打つ。
:
:
といったループのプログラムにしました。
これまでのTLEの教訓を踏まえ、1から愚直に1個ずつ処理するプログラムは書かないと決め、何とか1発でACを取りました。。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long nzan = n;
long conrui = 0;
long ruijo = 1;
long point = 1;
for(long i=0;i<=7;i++){
if(nzan>999*ruijo){
conrui = conrui + (i * (((ruijo*1000)-1) - point + 1));
}else{
conrui = conrui + (i * (nzan - point + 1));
break;
}
point = ruijo*1000;
ruijo = ruijo*1000;
}
System.out.println(conrui);
}
}
###感想
Bにはまるとは思いませんでした。悔しいです。今後精進します。
これからもコツコツ取り組んで、茶色を目指したいと思います!
同じく灰色レベルで頑張っている方、お互い頑張りましょう!