Atcoderではまったので、備忘録もかねて書きます。
この問題にはまって、答えあってるし、テストケースもすべて通るのにRE(実行時エラー)を連発してパソコンたたき割りそうになりました。問題はコピペして載せるとまずそうなので、リンクから見てください。
私の書いたコードはこちらです。
#include <iostream>
using namespace std;
int main(){
int N,K,Q=0;
int A[200],L[200];
int X =0;
//入力フェーズ
cin >> N >> K >> Q;
for(int i = 1;i<=K;i++){
cin >> A[i];
}
for(int i =1;i<=Q;i++){
cin >> L[i];
}
for(int i=1; i<=Q ;i++){ //試行回数
X = L[i];
if(A[X]+1 != A[X+1] && A[X]<N){
A[X]=A[X]+1;
}
}
for(int i = 1;i<=K;i++){
cout << A[i] << " ";
}
return 0;
}
これ、ちゃんとテストケースを通ります。何がだめだかわかるでしょうか。
答えは問題で定義された制約条件にあります。
制約条件はこちら
制約
- 入力はすべて整数
お気づきでしょうか?今回Qが1000未満の条件になっているのですが、私は配列の定義で、
int A[200],L[200];
としており、Lの配列を200までしか確保していなかったので実行時エラーになりました。
悔しい、悔しすぎる!
配列関係でREはよく出やすいらしいので慎重にやるのが大切ですね。
このほかにもハマるパターンを紹介している人がいたのでリンク張っときます。