【codeforces 434 div 1 A】Did you mean...

【链接】h在这里写链接


【题意】


让你维护一段序列。
这段序列,不会出现连续3个以上的辅音。
(或者一块全是辅音则也可以)
(用空格可以断开连续次数);
要求空格最小。

【题解】


模拟着,别让它出现连续三个辅音就好。
不到万不得已不加空格。
按照这个原则去贪心。

【错的次数】


0

【反思】


在这了写反思

【代码】

#include <bits/stdc++.h>
using namespace std;

const int N = 3e3;

int n;
int a[N+10],is[400];
char s[N + 10];

int main() {
	//freopen("F:\\rush.txt", "r", stdin);
	ios::sync_with_stdio(0), cin.tie(0);
	is['a'] = is['e'] = is['i'] = is['o'] = is['u'] = 1;
	cin >> (s+1);
	n = strlen(s + 1);
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		if (!is[s[i]]) {
			cnt++;
			if (cnt >= 3) {
				bool ok = true;
				int j = max(1, i - 2);
				for (int k = j; k <= i - 1; k++)//前面的3个都和它一样吗
					if (s[k] != s[i])
						ok = false;
				if (ok)//如果是的话
				{
					cout << s[i];
					int k = i;
					while (k + 1 <= n && s[k + 1] == s[i]) {//往后一直找和它一样的
						k++;
						cout << s[k];
					}
					cnt = 2;
					i = k;//cnt变成2了,指向下一个。
				}
				else {//不是的话。只能分割了。
					cout << ' '<<s[i];
					cnt = 1;
				}
			}
			else {
				cout << s[i];//没3个
			}
		}
		else {//是元音直接输出
			cout << s[i];
			cnt = 0;
		}
	}
	//连续出现
	return 0;
}


posted @ 2017-10-04 18:44  AWCXV  阅读(105)  评论(0编辑  收藏  举报