![見出し画像](https://assets.st-note.com/production/uploads/images/31713896/rectangle_large_type_2_51c3d190eadc237933d7ef5c74def541.jpeg?width=1200)
AtCoder Beginner Contest 174の感想
AtCoder様が開催したコンテストをやってみました、全然解けなかった、とぼやくだけなので解説などは一切ありません。
問題はこちらから、
https://atcoder.jp/contests/abc174
A問題は、数値を受けとってif文一つで終わり。
B問題は、複数個地点が与えられて、その地点までの距離がしきい値以下のものは何個あるか数えて終わり。
と思ったら、int型だと桁数が足りなくて、なかなかテストに通らなくて焦った。long型に変更して無事解決。
C問題は、倍数の問題。引用をすると、
7, 77, 777, … という数列の中に初めて K の倍数が登場するのは何項目ですか?
こんな感じ、初めは
int K;
cin >> K;
long seven = 0;
int count = 0;
while(1)
{
count++;
seven = seven * 10 + 7;
if(seven % K == 0)
{
break;
}
}
こんな感じで行けるんじゃないかなとやってたけど、サンプル入力に
入力 999983
出力 999982
というものがあり、愚直にやったら桁数が全然足りないや、となり断念。
そのあとも、倍数の知識を振り絞るもできませんでした。
試したことを挙げると、
1、K * m = 777777... となるから、mを求めたい。Kの1桁目でmの1桁目を場合分けできる。繰上りを考慮して2桁、3桁目といけないか?
2、整数nがKで割り切れるとき、nの1桁目をとってきて、残りの数からn*2を引いた数もKで割り切れる。
(例:n = 294、 K = 7のとき、29"4"だから、29 - 4*8 = 21。21は7で割り切れる。nも7で割り切れる。)
という考えを再帰的にできないか?
こんな感じです。
これ以降の問題もちらっと見たけど、すっと閉じました。
順位は8500位ぐらい。A問題の提出者の9773人を母数とすると、下位10%ぐらいでした。世界は広いなーと思いつつも、精進せねばという感じです。
でも、あーでもない、こーでもない、と考えることは好きなので、非常に楽しめました。このあと解説動画が上がるそうなので、復習してきます。
この記事が気に入ったらサポートをしてみませんか?