#include #include #include using namespace std; int main(){ int flag,num=0,count=1,D; std::vector c(13); char a,memo; int result=0; cin >> D;//Dの入力 cin >> a;//初期入力を確保 memo = a; (a=='o')?(flag = 1):(flag = 0);//初期入力が休日ならフラグ立つ for (size_t i = 1; i < 14; i++) { cin >> a; //入力した文字が前に入力した文字と一致すれば、この文字の連続回数を数える。 if(a == memo)count = count + 1; else{//一致しなければ連続回数を保存 c[num]=count; count = 1; num = num + 1; memo = a; } } c[num]=count; num = num+1; //得られた数列を操作する。//まずはその一番前後の数字とDの足し算の大きい方を暫定解とする //平日の日数がもしD以下なら、その平日の数字と自分の一個前と一個後ろの休日と和をとる //そうでなければ、Dはその平日の前とその平日の後ろの休日の大きい方と和をとる //得られた和の中、一番大きいのを選んで出力。 if(flag == 1) result = D+c[0]; else result = D+c[1]; if(num >1){ if((num-flag)%2==0){ if(result < D+c[num-1])result = D+c[num-1]; } else{ if(result < D+c[num-2])result = D+c[num-2]; } } for (size_t i = flag; i < num; i=i+2) {//全ては平日の操作になる if(c[i]<=D){ count = c[i]; (i==0)?(0):(count = count + c[i-1]); (i==13)?(0):(count = count + c[i+1]); } else{ //ここでflag使わないので、変数として使わせていただきます (i==0)?(flag = 0):(flag = c[i-1]); (i==13)?(count = 0):(count = c[i+1]); (count > flag)?(0):(count = flag); count = count + D; } if(count > result) result = count; } cout << result << endl; }