結果
問題 | No.204 ゴールデン・ウィーク(2) |
ユーザー |
|
提出日時 | 2016-08-17 00:52:49 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 1,000 ms |
コード長 | 1,911 bytes |
コンパイル時間 | 496 ms |
コンパイル使用メモリ | 58,648 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-12-24 11:56:34 |
合計ジャッジ時間 | 1,924 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
#include <iostream> #include <string.h> #include <vector> using namespace std; int main(){ int flag,num=0,count=1,D; //std::vector<int> c[13]; int 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; }