ページ 11

質問です

Posted: 2010年9月11日(土) 16:58
by pon
http://rose.u-aizu.ac.jp/onlinejudge/Pr ... 34&lang=jp
この問題なのですが、以下のSourceだとWrong Answerになります。何が問題なのでしょうか。
int main(){
while(1){
double l[15]={0};
double sum[15]={0};
int flag=0;
for(int loop=0;loop<10;loop++){
if(scanf("%lf,",&l[loop]) == EOF){
flag=1;
break;
}
sum[loop]=sum[loop-1]+l[loop];
}
if(flag==1){
break;
}
double v1=0,v2=0;
scanf("%lf,%lf",&v1,&v2);
double ans=sum[9]*v1/(v1+v2);
int ret=-3;
for(int loop=0;loop<10;loop++){
if(sum[loop]>=ans){
ret=loop;
break;
}
}
if(ret==-3){
ret=9;
}
printf("%d\n",ret+1);
}
}

http://www.play21.jp/board/formz.cgi?ac ... &rln=61465
こちらもよろしくお願いします。

Re:質問です

Posted: 2010年9月11日(土) 22:01
by ideyan
まだちゃんと見てないけど、とりあえず
>sum[loop]=sum[loop-1]+l[loop];
これ、loop=0の時まずくないですか?

後、SampleInputではうまくいっているんでしょうか?

Re:質問です

Posted: 2010年9月11日(土) 22:34
by pon
確かにそこは何とかした方がよさそうですね。

SampleInputはうまくいっています。

Re:質問です

Posted: 2010年9月11日(土) 23:54
by ideyan
該当箇所を

if(loop)sum[loop]=sum[loop-1]+l[loop];
else sum[loop]=l[loop];

と変更してsubmitしたらAcceptedになりましたよ。

Re:質問です

Posted: 2010年9月12日(日) 14:55
by pon
そうですか!ありがとうございます。手元ではちゃんと動くのに何でなんでしょう

Re:質問です

Posted: 2010年9月12日(日) 22:19
by ideyan
sum[loop]=sum[loop-1]+l[loop];
の部分で、お手持ちの環境ではたまたま
sum[-1]に該当する場所が0だったか何かで
(連続して割りつけられていて、l[14]辺りが参照されてそう)、
偶然うまく動いていただけではないでしょうか。