こんばんは。
2021/5/8に、AtCoderのABC-200に参加しました。
レートは以下の通りとなっています。
C問題でつまづきました。
レートは278→264にダウン!順位は6646/8577でした。
おーっ、あーっ、ぐぅーっ、という感じですね。
A問題
世紀を求めるプログラム。念入りにテストしてしまいましたが、まあ何とか。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
System.out.println((n-1)/100+1);
}
}
B問題
ある数字、Nについて、K回以下の処理を繰り返す。
・Nが200の倍数だったら、200で割る。
・200の倍数でなかったら、末尾に200を付与する(123だったら、123200にする)
ここは言われたとおりに、まあなんとか。
でも、200を付与するのに、文字列型に変換して付与するのはださいですね。
1000倍して、200を足す方がスマートですね。
後で振り返るのも大事です。
import java.util.Scanner;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long k = sc.nextLong();
long nwk = n;
String nwks = String.valueOf(n);
for(int i=0;i<k;i++){
if(nwk%200==0){
nwk = nwk/200;
}else{
nwks = nwks + "200";
nwk = Long.parseLong(nwks);
}
nwks = String.valueOf(nwk);
}
System.out.println(nwk);
}
}
C問題
Nこの文字列Ai~Anを入力。
Ai-Ajが200の倍数、が成り立つ組み合わせはいくつあるか。
タイムアウトだってわかってはいたけれど、いいロジックが思いつかず・・入力時に、入力済みの全文字列を比較する処理をまずは組んでみました。
当然TLE。
次に、下2桁が同じものは、「条件が成立する可能性がある組み合わせ」と考え100個の配列に、下2桁が同じものを分類し、最期にまとめて計算する方法を取ってみましたが、タイムアウトに加え実行時エラーで発生し終了3分前に敗北。
でした。
感想
解けなかったC問題を、例えば明日解説を参考に解いてみるとか、もっとした方が良いんだろうなと思うのですが、時間も限られているので気の向くまま学習を進めます。
会社でも、競技プログラミングの本をおすすめされていたので、やっぱり読んでみようかな。
ではまた。