問題はこちら
No.436 ccw - yukicoder
やるだけ
cが2個以上かつwが1個以上あることがccwが存在するための必要十分条件なので、cを1個以下にするかwをすべて消すか。
つまり「cの個数-1」「wの個数」のminが答え
#define min(p,q)(p<q?p:q) char s[10010]; int c,w,i; int main(){ gets(s); for(i=0;s[i];i++)if(s[i]=='c')c++;else w++; printf("%d",min(c-1,w)); return 0; }
当然配列に読み込む必要はないのでgetcharで頑張る
'c'が99、'w'が119、'\n'が10なので、いい感じに分離出来る方法を考えると
i,j; main(x){ for(;x=~getchar();x%3?i++:j++); i=!printf("%d",i-2<j?i-2:j); //改行の分でiが余分に増えるので-1でなく-2 }
ここでiをmain引数にして、更に正負を逆にすれば、~iで求める値が取り出せる
x,j; main(i){ for(;x=~getchar();x%3?i--:j++); x=!printf("%d",~i<j?~i:j); }
最後に出力もfor文のなかに押し込んで
x,j;main(i){for(;x=~getchar()?:!printf("%d",~i<j?~i:j);x%3?i--:j++);}
69B