月赛最后一题40分救助
  • 板块题目总版
  • 楼主zxyall
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/3/8 22:39
  • 上次更新2024/3/9 10:06:24
查看原帖
月赛最后一题40分救助
1067001
zxyall楼主2024/3/8 22:39

调半天到四十分不知道哪错了求助大佬~

#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;
}
2024/3/8 22:39
加载中...