POJ 1566 - Haiku Review
http://poj.org/problem?id=1566
概要
3行の俳句が与えられる. 各行はそれぞれ 5, 7, 5 の音節を持たなければならない.
音節の数が間違っている最初の行を答える. すべて正しい場合は Y と答える.
1音節は単語中の連続する母音からなり,母音は 'a', 'e', 'i', 'o', 'u', 'y' である.
制約
- 1つの俳句に含まれる文字数 <= 200
解法
やるだけ.
poj/1566.cc1 #include <iostream> 2 #include <sstream> 3 #include <vector> 4 using namespace std; 5 6 bool vowel(char c) 7 { 8 return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y'; 9 } 10 11 int syllables(const string& word) 12 { 13 int c = 0; 14 for (string::const_iterator it = word.begin(); it != word.end();) { 15 if (vowel(*it)) { 16 ++c; 17 while (it != word.end() && vowel(*it)) { 18 ++it; 19 } 20 } else { 21 ++it; 22 } 23 } 24 return c; 25 } 26 27 int main() 28 { 29 string inp; 30 while (getline(cin, inp) && inp != "e/o/i") { 31 vector<int> cs; 32 istringstream iss(inp); 33 string line; 34 while (getline(iss, line, '/')) { 35 int c = 0; 36 istringstream ss(line); 37 string word; 38 while (ss >> word) { 39 c += syllables(word); 40 } 41 cs.push_back(c); 42 } 43 if (cs[0] == 5 && cs[1] == 7 && cs[2] == 5) { 44 cout << "Y" << endl; 45 } else { 46 for (int i = 0; i < 3; i++) { 47 static int tbl[] = {5, 7, 5}; 48 if (cs[i] != tbl[i]) { 49 cout << i+1 << endl; 50 break; 51 } 52 } 53 } 54 } 55 return 0; 56 }