もどくんちゃんねる ガジェット部

自転車、ガジェット、映像制作、CG、Blender など

Atcoder 答えがあってるのにRE(実行時エラー)が出るときの対処法

Atcoderではまったので、備忘録もかねて書きます。

 

この問題にはまって、答えあってるし、テストケースもすべて通るのにRE(実行時エラー)を連発してパソコンたたき割りそうになりました。問題はコピペして載せるとまずそうなので、リンクから見てください。

atcoder.jp

 

私の書いたコードはこちらです。

#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;

}

 

これ、ちゃんとテストケースを通ります。何がだめだかわかるでしょうか。

答えは問題で定義された制約条件にあります

制約条件はこちら

制約

  • 1\leq K\leq N\leq 200
  • 1\leq A_1<A_2<\cdots<A_K\leq N
  • 1\leq Q\leq 1000
  • 1\leq L_i\leq K
  • 入力はすべて整数

お気づきでしょうか?今回Qが1000未満の条件になっているのですが、私は配列の定義で、

 int A[200],L[200];
としており、Lの配列を200までしか確保していなかったので実行時エラーになりました。
 
悔しい、悔しすぎる!
配列関係でREはよく出やすいらしいので慎重にやるのが大切ですね。
 
このほかにもハマるパターンを紹介している人がいたのでリンク張っときます。

shmug.hatenablog.com