D. Unnatural Language Processing

题目:
D. Unnatural Language Processing
每次测试的时间限制1秒钟
每次测试的内存限制256兆字节
投入标准输入
输出标准输出
露拉觉得很无聊,决定用这五个字母创造一种简单的语言a, b, c, d, e。有两种类型的信件:

元音—信件a和e。他们由以下人员代表V.
辅音—信件b, c,以及d。他们由以下人员代表C.
有两种类型音节在语言中:CV(辅音后跟元音)或CVC(元音前后带辅音)。举个例子,ba, ced, bab是音节,但是aa, eda, baba不是。
A 单词在语言中是一系列音节。Lura在语言中写了一个单词,但她不知道如何将其拆分为音节。帮助她把单词分解成音节。

例如,给定单词bacedbab,它将被拆分成音节,如ba.ced.bab(圆点.代表音节边界)。

投入
输入由多个测试用例组成。第一行包含一个整数t (1≤t≤100)—测试用例的数量。测试用例的描述如下。

每个测试用例的第一行包含一个整数n (1≤n≤2⋅105)—单词的长度。

每个测试用例的第二行包含一个字符串,由n小写拉丁字符—单词。

给出的所有单词都是语言中的有效单词;也就是说,他们只使用字母a, b, c, d, e,每个单词由几个音节组成。

的总和n所有测试案例不超过2⋅105.

输出
对于测试用例,输出一个字符串,表示通过插入一个点将单词分成音节.每对相邻音节之间。

如果有多个可能的分割,输出其中任何一个。输入以这样的方式给出,即至少存在一种可能的分裂。

例子
投入复制
6
8
bacedbab
4
baba
13
daddecabeddad
3
dac
6
dacdac
22
dababbabababbabbababba
输出复制
ba.ced.bab
ba.ba
dad.de.ca.bed.dad
dac
dac.dac
da.bab.ba.ba.bab.bab.ba.bab.ba
思路:
每次遇见V后要看V后面有连着有几个C,如果只有一个C说明是CV结构的,如果有两个C说明是CVC结构的,最后一个单词单独判定。
代码:

#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
int main()
{
    
    
	IOS;
	int n;
	cin >> n;
	while (n--)
	{
    
    
		int t;
		cin >> t;
		string arr(t+2, 0);//储存字符
		string wwr(t+2, 0);//将字符转化为C,V
		string ans = "";
		for (int i = 0; i < t; i++)
		{
    
    
			cin >> arr[i];
			if (arr[i] == 'a' || arr[i] == 'e')
				wwr[i] += 'v';
			else
				wwr[i] += 'c';
		}
		for (int i = 0; i < t; i++)
		{
    
    
			ans += arr[i];
			if (wwr[i] == 'c' && i == t - 3)//判断最后一个单词CVC结构
			{
    
    
				ans += arr[i + 1];
				ans += arr[i + 2];
				break;
			}
			else if (wwr[i] == 'c' && i == t - 2)//判断最后一个单词是否为CV结构
			{
    
    
				ans += arr[i + 1];
				break;
			}
			else if (wwr[i] == 'v')
			{
    
    
				if (wwr[i + 2] == 'c')
				{
    
    
					ans += arr[i + 1];
					ans += '.';
					i++;
				}
				else
				{
    
    
					ans += '.';
				}
			}
		}
		cout << ans << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Tokai___Teio/article/details/135299275