プログラミングについて
私はAOJという競技プログラミングの問題を解いていたのですが、とある問題に引っかかりどうしてもわからないのでご教授願いたいです。
問題番号は0544ですごろくという問題なのですが、テストケースを通しても問題がないため、どこが間違っているのかわかりません。
言語はC++です。
#include
#include
using namespace std;
int main(){
int turn;
int stepn = 0;
int sain = 0;
vector
for(turn = 0; ;turn++){
cin >> stepn;
cin >> sain;
if(stepn == 0 && sain == 0){
break;
}
int pos = 0;
int g = 0;
vector
vector
sai.resize(sain,0);
for(int n = 0;n
}
for(int n = 0;n
}
for(int t = 0;t
>テストケースを通しても問題がないため、どこが間違っているのかわかりません
???
質問文オリジナルコードのまま、
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0544
にある 入力例1, 入力例2 のデータ与えたら、
待っても終了しませんでした
10秒くらいがまんして Ctrl+C しましたので、
無限ループなのかどうかはわかりませんが。
>どうやらstep配列を参照していた部分がまずかったようです
で直ったということかしら?
正しく動くコードなのか否か、定かではないので、
なんともいえないですけど、コード拝見して
・なんでvector3つ要るのかな?
・こんなに難しく書かないといけないのかしら?
と、思いました。
AOJは過去自分でトライしたことはありません。
この質問契機で初めて問題文見ましたし、かんちがい&&バグあり
かもしれませんが、解いてみました。
他人の考え方も見てみようかと思うなら、読んでみてください。
入力例1, 2の出力結果は、サイトにあるのと合ってました。
#include
#include
int main() { board(n);
___ int n, m;
___ std::cin >> n >> m;
___ std::vector
___ for (auto& b : board)
___ ___ std::cin >> b;
___ int pos, try_count;
___ for (pos = try_count = 0; m > 0 && pos < (n-1); --m, ++try_count) { ___ ___ int dice; ___ ___ std::cin >> dice;
___ ___ pos += dice;
___ ___ if (pos < n) ___ ___ ___ pos += board[pos]; ___ } ___ std::cout << try_count << std::endl; ___ return 0; }
まだプログラムをやり始めて間もなく、拙いコードになってしまっているということでご理解ください。
私の最初のコードではstep[pos]で配列外を参照する可能性があったのでそこを直した、ということです。
取り敢えずそれで正解はしたのでもう少し処理時間を短くする方法はないか、という質問です。お手数をおかけして申し訳ないです。