关于循环优化
查看原帖
关于循环优化
580608
lupengheyyds楼主2022/10/5 15:05

rt:

#include<bits/stdc++.h>
using namespace std;
bool mp[30][30];
string he(char one,char other,string s){
	string num;
	for(int i=0;i<s.size();i++)
		if(s[i]==one||s[i]==other)num+=s[i];
	return num;
}
int main(){
	string s,t;cin>>s>>t;
	for(char i='a';i<'r';i++)
		for(char j=i+1;j<='r';j++)
			mp[j-'a'][i-'a']=mp[i-'a'][j-'a']=(he(i,j,s)==he(i,j,t));
	int q;cin>>q;
	while(q--){
		bool flag=false;
		string str;cin>>str;
		for(int i=0;i<str.size()-1;i++){
			for(int j=i+1;j<str.size();j++)
				if(!mp[str[i]-'a'][str[j]-'a']){
					cout<<"N";
					flag=true;
					break;
				}
			if(flag)break;
		}
		if(flag)continue;
		cout<<"Y";
	}
	return 0;
}

如代码,1515行与2222行的循环我进行了一个优化,没有枚举所有的组合,尤其在1616行正反都进行了赋值,理论上应该是没有问题的,可却WAWA

然后我改成了:

for(char i='a';i<'r';i++)
		for(char j='a';j<='r';j++)
			mp[j-'a'][i-'a']=mp[i-'a'][j-'a']=(he(i,j,s)==he(i,j,t));

和:

	for(int i=0;i<str.size();i++){
			for(int j=0;j<str.size();j++)
				if(!mp[str[i]-'a'][str[j]-'a']){
					cout<<"N";
					flag=true;
					break;
				}

ACAC了,并且必须两个都改,只改一个都WAWA

2022/10/5 15:05
加载中...