結果
問題 | No.252 "良問"(良問とは言っていない (2) |
ユーザー | koyopro |
提出日時 | 2015-10-07 18:19:05 |
言語 | C++11 (gcc 11.4.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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 66 ms
29,440 KB |
testcase_01 | AC | 98 ms
29,568 KB |
testcase_02 | AC | 65 ms
29,696 KB |
testcase_03 | AC | 66 ms
31,204 KB |
testcase_04 | AC | 65 ms
31,208 KB |
testcase_05 | AC | 65 ms
31,336 KB |
testcase_06 | AC | 19 ms
29,440 KB |
ソースコード
#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 2222222 string 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; }