CF1915D Unnatural Language Processing 题解

Posted on 2024-03-02 16:57  _XOFqwq  阅读(5)  评论(0编辑  收藏  举报

容易发现音节的划分不仅要求子串形如 \(\texttt{CV}\)\(\texttt{CVC}\),并且接下来的两个字符也必须是 \(\texttt{CV}\),不然会导致无法划分下去。

于是我们遍历字符串,找出所有满足上述条件的子串,记录需要输出 \(\texttt{.}\) 的位置即可。

实现:

int n; string s,ans,t="";
cin>>n>>s,ans=s,memset(x,-1,sizeof(x)),tot=0; //x是记录需要输出.的位置的数组
for(int i=0;i<s.size();i++){
	if(s[i]=='a'||s[i]=='e') s[i]='V';
	else s[i]='C';
}
for(int i=0;i<s.size();i++){
	t+=s[i];
	if((t=="CV"||t=="CVC")&&(s[i+1]=='C'&&s[i+2]=='V')) x[++tot]=i,t="";
}
for(int i=0,j=1;i<ans.size();i++){
	cout<<ans[i];
	if(i==x[j]) cout<<'.',j++;
}
cout<<'\n';