問題はこちら
No.149 碁石の移動 - yukicoder
AからBへはできるだけ黒い碁石を、BからAへはできるだけ白い碁石を動かせばよい
int main(){ int a,b,c,d,e; scanf("%d%d%d%*d%d%d",&a,&b,&c,&d,&e); d=d>b?d-b:0; a-=d; //AからBへ移されてしまう白石の数をカウント a+=c+d<e?c+d:e; //BからAへ移される白石は //1回目の操作終了後にBにある白石(c+d)と移す個数(e)のminになる printf("%d",a); return 0; }
ちゃちゃっと
a,b,c,d; main(e){ scanf("%d%d%d%*d%d%d",&a,&b,&c,&d,&e); d-=d>b?b:d; a=!printf("%d",c+d<e?a+c:a-d+e); }
98B
今回は前回や前々回のように、for文やmain再帰では縮まない
(途中に読み捨てがある分で既に短い)
16/07/16追記
自明な1Bが残ってた…
a,b,c,d; main(e){ scanf("%d%d%d%*d%d%d",&a,&b,&c,&d,&e); d-=d>b?b:d; a=!printf("%d",a+=c+d<e?c:e-d); }
97B
16/07/29追記
fmin,fmaxを駆使して1B縮む
d-=d>b?b:d;a+=c+d<e?c:e-d; d=fmax(d-b,0);a+=fmin(c,e-d); a+=fmin(c,e-fmax(d-b,0));
ということで96B
a,b,c,d; main(e){ scanf("%d%d%d%*d%d%d",&a,&b,&c,&d,&e); a=!printf("%d",a+=fmin(c,e-fmax(d-b,0))); }