请求撤下 0 篇题解并添加 hack 数据
查看原帖
请求撤下 0 篇题解并添加 hack 数据
542457
cff_0102sky & aqua楼主2024/10/10 20:16

hack.in:

1
aquaqaqsky
ssssssskya

正确输出:

6

以下代码输出 7:

#include<bits/stdc++.h>
#define endl "\n"
using namespace std;
char mp[128];
bool f[128];
bool v[128];
int now;
int ccnt;
void dfs(int x){
	if(x==0)return;
	if(v[x]){
		if(x==now)ccnt++;
		return;
	}
	v[x]=1;
	dfs(mp[x]);
}
int mian(){
	string s,t;cin>>s>>t;
	memset(f,0,sizeof f);
	memset(v,0,sizeof v);
	memset(mp,0,sizeof mp);
	int n=s.length();s=' '+s;t=' '+t;
	for(int i=1;i<=n;i++){
		if(mp[s[i]]&&mp[s[i]]!=t[i]){
			cout<<-1<<endl;
			return 0;
		}
		mp[s[i]]=t[i];
		f[t[i]]=1;
	}
	int cnt=0;
	for(int i='A';i<='z';i++)cnt+=f[i];
	if(cnt==52&&s!=t)return cout<<-1<<endl,0;
	int ecnt=0;ccnt=0;
	vector<int>in[128];
	for(int i='A';i<='z';i++){
		if(mp[i]==i)mp[i]=0;
		ecnt+=(bool)(mp[i]);
		in[mp[i]].push_back(i);
	}
	for(int i='A';i<='z';i++){
		if(in[i].size()==2){
			if(!v[i])dfs(i);
		}
	}
	for(int i='A';i<='z';i++){
		if(!v[i])now=i,dfs(i);
	}
	cout<<ccnt+ecnt<<endl;
	return 0;
}
int main(){
	ios::sync_with_stdio(0);cin.tie(0);
	int t;cin>>t;while(t--)mian();
	return 0;
}
2024/10/10 20:16
加载中...