paizaの問題であみだくじを与えられたときに一番左はじにたどり着くくじはどれかを解答する問題で以下のようなコードを書きました.しかし提出すると10個あるテストケースのうち3つのテストケースでランタイムエラーが出されました.どの部分がエラーを出しているかわからないのでわかる方いたらご教授お願いします.
入力は次のように与えられます.
L n m L = くじの長さ(cm) n = くじの本数 m = くじを繋ぐ横線の本数
ai bi ci ai = 左から何番目のくじか表す bi = 上からbi(cm)の位置にai番目のくじから線を引く
・ ・ ・ ci = 上からci(cm)の位置にai+1番目のくじに線を引く
・ ・ ・
・ ・ ・
あみだくじの横線が入るところをcountで対応させそれ以外を0にして
あとは左下からくじを辿っていく形にしています.
エラー箇所がわかりましたらお願いします
#include <iostream>
#include <stdio.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <vector>
#include <map>
#include <cstdio>
#include <utility>
#include <sstream>
using namespace std;
int main(){
int L, n, m;
cin >> L >> n >> m;
int amida[L][n];
for(int i = 0;i < L;i++){
for(int j = 0;j < n;j++){
amida[i][j] = 0;
}
}
int a, b, c; int count = 1; while(cin >> a >> b >> c){ //cout << "a = " << a << " b = " << b << " c = " << c << endl; amida[b-1][a-1] = count; amida[c-1][a] = -1*count; count++; } int x = 0, y = 0, temp = 0; int p = 0, hantei = 0; for(int i = 0;i < L;i++){ if(amida[i][0] != 0){ temp = amida[i][0]; } } //cout << temp << endl; while(1){ if(temp == 0) break; else if(temp > 0){ for(int i = 0;i < L;i++){ //cout << "amida[i][x+1] = " << amida[i][x+1] << endl; if(abs(temp) == abs(amida[i][p+1])){ x = p + 1; p++; y = i; break; } } //cout << "x = " << x << " y = " << y << endl; for(int i = y-1;i >= 0;i--){ if(amida[i][x] != 0){ temp = amida[i][x]; break; } if(i == 0) y = 0; } } if(y == 0) break; else if(temp < 0){ for(int i = 0;i < L;i++){ if(abs(temp) == abs(amida[i][p-1])){ x = p - 1; p--; y = i; break; } } for(int i = y-1;i >= 0;i--){ if(amida[i][x] != 0){ temp = amida[i][x]; break; } if(i == 0) y = 0; } } if(y == 0) break; } cout << x+1 << endl; return 0;
}
回答3件
あなたの回答
tips
プレビュー