//自分で読んでも分からなくなること間違いなしっぽいのでメモ #define max(a,b) (a>b?a:b) o1,o2,x1=14,d,m,n,t='x'; //mはこれまでの最大値,tは今見てる1つ前の文字,nは今見てる文字 //o1x1o2と並んでいて、o2の切れ目でx1を潰す処理をする main(){ for(scanf("%d",&d);~t;t=n==10?t:n){ //最後まで読んだ後も1回処理したいので終了条件はtで書く n=getchar(); n==10?0://改行は読み飛ばす n=='o'?o2++://oならo2カウンタを増やすだけ //そうでない(==今の文字がxの)とき td?max(m,o2+d):max(m,o1+o2+x1)//o2が終わったと解釈してx1を潰してみる //例えばd=6なら //前者がoooxxxxxxxxooo→oooxxOOOOOOoooみたいなやつで //後者がooxxxxooo→ooOOOOoooみたいなやつ //後者にはxooxooxみたいにはみ出して潰せないパターンもあるが //その場合はo1+x1+o2n|!n?m=r>d?d+q>m?d+q:m:m>(p+=q+r)?m:p,p=q,q=0,r=1:r++:q++:0)n=~getchar();m=!printf("%d",p+d>m?p+d:m);} //nの初期値が-121以下になってないと死ぬ