問題はこちら
No.486 3 Straight Win(3連勝) - yukicoder
strstr関数を使うのが一番素直だと思う
#include <string.h> int main(){ char s[110],*x,*o; gets(s); x=strstr(s,"XXX"); o=strstr(s,"OOO"); if(x==NULL&&o==NULL)puts("NA");//どっちも見つからない else if(x==NULL&&o!=NULL)puts("East");//OOOだけ見つかる else if(x!=NULL&&o==NULL)puts("West");//XXXだけ見つかる else if(x<o)puts("West");//両方見つかったがXXXの方が先 else puts("East");//両方見つかったがOOOの方が先 return 0; }
この方針で縮めるとこう
char s[110];x,o;main(){ gets(s); x=strstr(s,"XXX"); o=strstr(s,"OOO"); x=!puts(x|o?x<o^x*o?"East":"West":"NA"); }
ただし、x,oが32bit整数として大小比較をしてうまくいくかは怪しい(実際には提出していない)
まあstrstrなんて使わなくても、前からreadしていけばいいよね
f,s,b;main(c){ for(;read(0,&c,1);){ if(!f){//まだ勝者が決まっていなければ if(b==c){//今の勝者が前回の勝者と同じなら s++;//連勝数を1増やして if(s==3)f=c;//3になった勝ち }else{//違うなら s=1;//連勝数は1になる b=c; } } } s=!puts(f?b&1?"East":"West":"NA"); }
ぐっと睨むと、sが3以上かどうかを見ればfがいらないことがわかる
s,b;main(c){ for(;read(0,&c,1);)s<3&&b-c?b=c,s=1:++s; s=!puts(s>2?b&1?"East":"West":"NA"); }
89B