ABC 266 に参加した。
あと一歩で解けず、他の方の回答を見て悶絶したので自戒のため、次回のために
編集しておく
atcoder.jp
基本的に全探索+ 倍数判定で解ける問題なのだが、
出力例が一致せずつまってしまった。
■正解例
for (long i = 0; i <= 998244353; i++) { if ( (N-i)% 998244353 == 0) { System.out.println(i); return; }
■誤答例
for (int i = 0; i <= 998244353; i++) { int num = (int) (N - i); if (998244353 % num == 0) { System.out.println(i); return; }
何度やっても全問ACにならず、色々こねくり回したのだが
結果的にアルゴリズムは単純で、標準入力で受け取った値を
for文でループする際にintにキャストしてしまったのが原因だった。
凡ミス、、普段ループを回すときにintでしか回さない為
考えがおよばなかった。
Longを扱う試験は今後もでるから気をつけよう
ちなみにだが、公式の動画で言及していたのだが、
入力値N を倍数判定の対象となる数で割ることでもxを求められる。
こちらの方がアルゴリズム的にシンプル。
**を~~で割ったあまりを求める、というのはよく出るらしいので次はすぐ解けるようにしたい。 ※下記はサンプル
long res = in % min; if(in < 0 && res != 0) { res = min - Math.abs(res); }