結果
問題 | No.252 "良問"(良問とは言っていない (2) |
ユーザー |
![]() |
提出日時 | 2015-10-07 18:19:05 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 98 ms / 2,000 ms |
コード長 | 1,408 bytes |
コンパイル時間 | 1,489 ms |
コンパイル使用メモリ | 164,172 KB |
実行使用メモリ | 31,336 KB |
最終ジャッジ日時 | 2024-07-20 01:54:57 |
合計ジャッジ時間 | 2,526 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 7 |
ソースコード
#include "bits/stdc++.h"using namespace std;#define REP(i, n) for(int i=0; i<(n); i++)#define RREP(i, n) for(int i=(n-1); i>=0; i--)#define MAX 2222222string s;int N;signed main(){cin >> N;vector<int> ans;string good = "good";string problem = "problem";REP(n,N) {cin >> s;int ming[MAX];int minp[MAX];REP(i,s.size()) ming[i]=minp[i]=100;int problemcnt[MAX];problemcnt[0] = 0;REP(i,s.size()-3) {int cnt = 0;REP(j,4) {cnt += (s[i+j] != good[j]);}problemcnt[i] = (i==0) ? 0 : problemcnt[i-1];if (s.substr(i, 7) == problem) {problemcnt[i]++;}if (i == 0) ming[i] = cnt;else ming[i] = min(ming[i-1], cnt);}RREP(i,s.size()-6) {int cnt = 0;REP(j,7) {cnt += (s[i+j] != problem[j]);}if (i == s.size()-7) minp[i] = cnt;else minp[i] = min(minp[i+1], cnt);}int minc = 9999;REP(i,s.size()-7) {if (i+4 >= s.size()) break;int pc = (i==0) ? 0 : problemcnt[i];minc = min(minc, ming[i] + minp[i+4] + pc);}ans.push_back(minc);}for (auto&& a : ans) {cout << a << endl;}return 0;}