問題はこちら
No.512 魔法少女の追いかけっこ - yukicoder
追いかける側がA[i]地点にあるi番目の交差点にたどり着いた時、追いかけられる側はA[i]/X*Y地点にいる。これがA[i+1]より真に大きければ見失う。
除算をすると誤差で落とされるケースが多数あるらしいので、A[i]/X*Y≦A[i+1]をA[i]*Y≦A[i+1]*Xと変形して整数の範囲でやる
a[100],x,y,n; main(){ scanf("%d%d%d",&x,&y,&n); for(int i=0;i<n;i++)scanf("%d",a+i); for(int i=0;i<n-1;i++)if(a[i]*y>a[i+1]*x){ puts("NO"); return 0; } puts("YES"); }
前から順番に読み込めば配列はいらない
p,q,f; main(a,b){ for(scanf("%d%d%*d",&a,&b);~scanf("%d",&q);p=q)f|=a*q<b*p; puts(f?"NO":"YES"); }
94B
scanfを1つにするパターンも考えたが、Nの読み飛ばしが難しくて短くならなかった
p,q,f;main(a,b){for(scanf("%d%d%*d",&a,&b);~scanf("%d",&q);p=q)f|=a*q<b*p;puts(f?"NO":"YES");} a,b,p,q,f;main(i){for(;~scanf("%d",&q);*(--i?~i?i+2?&p:&q:&b:&a)=q)f|=a*q<b*p;puts(f?"NO":"YES");} a,b,p,q,f;main(i){for(;~scanf("%d",&q);~i--?i>-2?a=b,b=q:(p=q):0)f|=a*q<b*p;puts(f?"NO":"YES");}
2017/08/01追記
やっぱりscanfを1つにしたほうが短くなった
a,b,p,q,f; main(i){ for(;~scanf("%d",a?b?&q:&b:&a);--i+2?p=q:0)f|=a*q<b*p; puts(f?"NO":"YES"); }
92B