【链接】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; }