前提
atcoderの問題で、バグが発生しましたが、原因がつかめていません。
実現したいこと
バグの原因を突き止める。
発生している問題・エラーメッセージ
該当のソースコード
c
1ソースコード 2#include<stdio.h> 3 4int max_kohuku(int a,int b,int c);//3つの中から最大を返す 5int second_kohuku(int a,int b,int c);//3つの中から2番目に大きい数を返す 6 7int main(){ 8 int N; 9 int kohuku[100010][3];//i日目の行動jをした時の幸福度はkohuku[i][j] 10 int sum_kohuku[100010][2];//i日目に行動jをしたときにそれを含めた最大の幸福度はsum_kohuku[i][j] 11 int sss; 12 sss = scanf("%d",&N); 13 for(int i = 0;i < N;i++){ 14 sss = scanf("%d %d %d",&kohuku[i][0],&kohuku[i][1],&kohuku[i][2]); 15 sum_kohuku[i][0] = -1;//初期化 16 sum_kohuku[i][1] = -1;//初期化 17 } 18 19 sum_kohuku[0][1] = max_kohuku(kohuku[0][0],kohuku[0][1],kohuku[0][2]); 20 sum_kohuku[0][0] = second_kohuku(kohuku[1][0],kohuku[1][1],kohuku[1][2]); 21 for(int i = 1;i < N;i++){ 22 sum_kohuku[i][1] = max_kohuku(kohuku[i][0],kohuku[i][1],kohuku[i][2]) + sum_kohuku[i-1][0]; 23 sum_kohuku[i][0] = second_kohuku(kohuku[i][0],kohuku[i][1],kohuku[i][2]) + sum_kohuku[i-1][1]; 24 } 25 int pri; 26 if(sum_kohuku[N-1][0] > sum_kohuku[N-1][1]){ 27 pri = sum_kohuku[N-1][0]; 28 }else{ 29 pri = sum_kohuku[N-1][1]; 30 } 31 printf("%d",pri); 32 return 0; 33} 34 35int max_kohuku(int a,int b,int c){ 36 int ret = a; 37 if(ret < b){ 38 ret = b; 39 } 40 if(ret < c){ 41 ret = c; 42 } 43 return ret; 44} 45 46int second_kohuku(int a,int b,int c){ 47 int ret = a; 48 if(ret == max_kohuku(a,b,c)){ 49 ret = b; 50 } 51 if((ret < b) && b != max_kohuku(a,b,c)){ 52 ret = b; 53 } 54 if((ret < c) && c != max_kohuku(a,b,c)){ 55 ret = c; 56 } 57 return ret; 58}
試したこと
まず、前に質問した時にscanfの返り値にsssをつけずに、(void)scanfとすればいいと教えてくださった方がいたのですが、atcoderのシステムの関係なのか、それでもバグが出たので返り値をつけさせていただきました。
変数のオーバーフローかと思ってkohuku,sum_kohukuの要素を5倍くらいに増やしたのですが、実行結果は変わりませんでした。
自分の環境で、サンプルを入力すると正しく動作します。
補足情報(FW/ツールのバージョンなど)
問題のURLです
https://atcoder.jp/contests/dp/tasks/dp_c
もし、ほかに必要な情報があれば教えてください。
回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー