AOJ 1601: Short Phrase
問題
Short Phrase | Aizu Online Judge
単語の列から57577になっている部分列を探し、最初の部分列の最初の単語番号を出力せよ
方針
57577のどこをチェックしているかをstageで管理して最終ステージまで言ったらクリアみたいな感じ
コード
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define rep(i, n) for(int i=0; i<(n); ++i) int main(void){ int n; int w[41]; string s; while(cin >> n && n) { rep(j, n) { cin >> s; w[j] = s.size(); } bool clear; int i; for(i=0; i<n; ++i) { int j = i; int stage = 0; clear = false; int tmp = 0; while(j < n) { tmp += w[j] ; if(stage == 0) { if(tmp == 5) stage++, tmp = 0; if(tmp > 5) break; } if(stage == 1) { if(tmp == 7) stage++, tmp = 0; if(tmp > 7) break; } if(stage == 2) { if(tmp == 5) stage++, tmp = 0; if(tmp > 5) break; } if(stage == 3) { if(tmp == 7) stage++, tmp = 0; if(tmp > 7) break; } if(stage == 4) { if(tmp == 7) stage++, clear = true; if(tmp > 7) break; } j++; } if(clear) { cout << i+1 << endl; break; } } } }
http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=1893867
反省
- 自分が出た予選で唯一解いた問題。さすがに一発ACした
- stageの管理はループで書くのがきれい(だけど頭使いたくなかった)