社区讨论

月赛最后一题40分救助

题目总版参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@ltirlcvs
此快照首次捕获于
2024/03/08 22:41
2 年前
此快照最后确认于
2024/03/09 10:06
2 年前
查看原帖
调半天到四十分不知道哪错了求助大佬~
CPP
#include<bits/stdc++.h>
using namespace std;
unordered_map<char,bool>mp={{'a',1},{'e',1},{'i',1},{'o',1},{'u',1}};
vector<string>v[20];
int n,q;

void work(int k,string s){//拆音节,特判n的情况
	
	for(int i=0,j=0;i<s.size();i++){
		j=i;
		while(j<s.size()&&mp[s[j]]!=1&&s[i]!='n')j++;
		if(s[j]=='n'&&mp[s[j+1]])j++;
		else if(s[j]=='n'&&!s[j+1]){
		if(j>i)v[k].push_back(s.substr(i,j-i));
		v[k].push_back("n");
		j++;
		i=j;
		continue;
		}
		v[k].push_back(s.substr(i,j-i+1));
		if(j>i)i=j;
	}
	
}

bool check(string s){
	int cnt=0;
	v[0].clear();
	work(0,s);//v[0]记录当前要检查字符串的音节
	for(int i=1;i<=n;i++){
		int a=0,b=0;
		
		while(a<v[0].size()&&b<v[i].size()){
			if(v[0][a]==v[i][b])b++;
			else b=0;
			a++;
		}
		if(b==v[i].size())cnt++;
		if(cnt>=2)return false;
	}
	if(cnt==1)return true;
	return false;
}

int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		string ss;cin>>ss;
		work(i,ss);
	}

	while(q--){
		string s;cin>>s;
		if(check(s))puts("Yes, Commander");
		else puts("No, Commander");
		
	}

    //for(auto x:v[0])cout<<x<<' ';
	return 0;
}

回复

3 条回复,欢迎继续交流。

正在加载回复...