您的位置:首页 > 其它

UVaLive/LA 6805 Pantun Grader(模拟)

2014-11-23 21:12 344 查看



6805 - Pantun Grader
题目大意:

按照给定的规则,给诗歌打分。有音节、押韵等规则。

解题思路:

仔细读题,主题细节。输入的逗号后不一定有空格。

参考代码:

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
#include <vector>
using namespace std;

const int MAXN = 210;
vector<vector<string> > sentence;
int nCase, cCase;

void init() {
sentence.clear();
}

int calcSyllable(string word) {
int len = word.length();
if (len == 6 && (word.find("ng") != string::npos || word.find("Ng") != string::npos
|| word.find("ny") != string::npos || word.find("Ny") != string::npos)) return 2;
if (len == 3 && (word[0] == 'a' || word[0] == 'A' || word[0] == 'e' || word[0] == 'E' || word[0] == 'i'
|| word[0] == 'I' || word[0] == 'o' || word[0] == 'O'  || word[0] == 'u' || word[0] == 'U')) return 2;
if (len >= 6) return 3;
if (len == 4 || len == 5) return 2;
if (len <= 3) return 1;
}

void solve() {
int syllable[MAXN] = {0}, A = 0, B = 0, C = 0, D = 0, E = 0;
string last[MAXN];

int n = min(4, (int)sentence.size());

for (int i = 0; i < n; i++) {
for (int j = 0; j < sentence[i].size(); j++) {
syllable[i] += calcSyllable(sentence[i][j]);
if (j == (int)sentence[i].size() - 1) {
last[i] = sentence[i][j].substr(sentence[i][j].size() - 2);
}
}
if (syllable[i] >= 8 && syllable[i] <= 12) A += 10;
}

for (int i = 0; i < n - 2; i++) {
if (last[i] == last[i + 2]) B += 20;
}

for (int i = 0; i < n - 2; i++) {
if (syllable[i] == syllable[i + 2]) C += 10;
}

if (sentence.size() > 4) {
D = ((int)sentence.size() - 4) * 10;
}

E = A + B + C - D;

printf("Case #%d: %d %d %d %d %d\n", ++cCase, A, B, C, D, E);
}

int main() {
scanf("%d", &nCase);
while (nCase--) {
init();
bool flag = false;
string tmp;
while (true) {
string str;
vector<string> ss;
if (flag) {
ss.push_back(tmp);
flag = false;
}
while (cin >> str && str[str.length() - 1] != ',' && str[str.length() - 1] != '.') {
if (str.find(',') != string::npos) {
int pos = str.find_first_of(',');
ss.push_back(str.substr(0, pos));
sentence.push_back(ss);
tmp = str.substr(pos+1);
flag = true;
break;
}
ss.push_back(str);
}
if (flag) continue;
if (str != "." && str != ",") ss.push_back(str.substr(0, str.length() - 1));
if (str[str.length() - 1] == '.') {
sentence.push_back(ss);
solve();
break;
}
if (str[str.length() - 1] == ',') {
sentence.push_back(ss);
}
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息