PKU3671 Dining Cows
問題の解法
Ozyさんのわかりやすい解説。
http://d.hatena.ne.jp/Ozy/20080731
コードの短縮過程
// 79B a,b;main(n){for(;a<b?b=a:0,~scanf("%d",gets(&n));a+=n-1)b+=2-n;printf("%d",b);} // AC 77B a,b;main(n){for(;~scanf("%d",gets(&n));a<b?b=a:0)n>1?a++:b++;printf("%d",b);} // AC 76B a;main(b,n){for(gets(n);a<b?b=a:0,gets(n);)atoi()>1?a++:b++;printf("%d",b);} // AC 73B a;main(b,n){for(;~scanf("%d",&n);a<b?b=a:0)n>1?a++:b++;printf("%d",b-1);} // AC 72B b;main(a,n){for(;~scanf("%d",&n);a>b?b=a:0)n>1?a--:b--;printf("%d",-b);} // AC 69B b;main(a,n){for(;gets(n);a>b?b=a:0)atoi()>1?a--:b--;printf("%d",-b);} // RE 66B b;main(a){for(;gets();a>b?b=a:0)atoi()>1?a--:b--;printf("%d",-b);} // AC 63B b;main(a,n){for(;gets(n);)atoi()<2?b-=a<b:--a;printf("%d",-b);} // AC 69B a,b;main(n){for(gets(&n);gets();)atoi()<2?b+=a>b:++a;printf("%d",b);} // AC 67B b;main(a,n){for(;gets(n);)a<1&atoi()<2?b-=a<b:--a;printf("%d",-b);} // AC 66B b;main(a,n){for(;gets(n);)a<1>=atoi()?b-=a<b:--a;printf("%d",-b);} // AC 63B a,b;main(n,m){for(;gets(&n);m=2)n%m?b+=a>b:a++;printf("%d",b);} // AC 63B a,b;main(n){for(;gets(&n);)n=n<50?b+=a>b+1:a++;printf("%d",b);} // 63B a,b;main(m,n){for(;gets(&n);)n-50?n=b+=a>b:a++;printf("%d",b);} // 63B b;main(a,n){for(;gets(&n);)n-50?n=b+=-a<~b:a++;printf("%d",b);} // 63B b;main(a,n){for(;gets(&n);n=0)n<50?b+=-a>b:a--;printf("%d",b);} // AC 61B b;main(a,n){for(;gets(&n);n&a<1?b-=a<b:a--);printf("%d",-b);}
長いこと63Bで足踏みしていて、61Bのブレイクスルーきたー…と思ったら、
速攻でOzyさんに抜かれてしまって涙目、という(よくある)展開。
下から四番目の
a,b;main(m,n){for(;gets(&n);)n-50?n=b+=a>b:a++;printf("%d",b);}
が一番惜しい。一行目に2が来たら嫌だなーと思って、わざわざ第二引数にgetsしている。
最初の63Bのコードで、一行目が1でも偶然正しい答えを返すことに感動していて、
どんな入力でも動くということに夢中になっていた。
普段は平気で入力依存のコード書いているというのに。