AC#1在线玄关求调
查看原帖
AC#1在线玄关求调
276221
lovelyRex楼主2023/9/19 16:58

RT记得@

#include<bits/stdc++.h>
using namespace std;
//#define int  long long
#define kg putchar(' ')
#define endl puts("")
inline int read(){
    int vis=1,ans=0;
    char x=getchar();
    while(x<'0'||x>'9'){
        if(x=='-')vis=-1;
        x=getchar();
    }
    while(x>='0'&&x<='9'){
        ans=ans*10+x-'0';
        x=getchar();
    }
    return vis*ans;
}
inline void print(int x){
    if(x<0)putchar('-'),x=-x;
    if(x>9)print(x/10);
    putchar(x%10+'0');
}
const int N=1e5+9,M=57;
int T=read();
string a,b;
vector<int>e[M];
int vis[M];
bool fi[M][M];
int ans[M];
int cnt=0;
int f;
bool visf;
int num=0;
int tint(char ch){
	return (ch<='Z'?ch-'A'+1:ch-'a'+27);
}
inline bool dfs(int s){
//	print(s),kg;
	if(vis[s])return 1;
	vis[s]=1;
	for(int i=0;i<e[s].size();i++){
		if(dfs(e[s][i])){
			return 1;
		} 
	}
	return 0;
}
signed main(){
	while(T--){
		cin>>a>>b;
		int n=a.size();
		memset(fi,0,sizeof(fi));
		memset(ans,0,sizeof(ans));
		a=' '+a,b=' '+b,num=0;
		for(int i=1;i<=52;i++)e[i].clear();
		for(int i=1;i<=n;i++){
			int x=tint(a[i]),y=tint(b[i]);
			if(fi[x][y])continue;
			ans[x]++;
			fi[x][y]=1;
			if(x==y)continue;
			e[x].push_back(y),num++;
		}
		visf=0;
		for(int i=1;i<=52;i++){
			if(ans[i]>1){
				print(-1),endl;
				visf=1;
				break;
			}
		}
		if(visf)continue;
		f=0;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=52;i++)if(!vis[i]&&e[i].size())f+=dfs(i);
		cnt=0;
		for(int i=1;i<=52;i++)if(e[i].size()>=1)cnt++;
		if(f&&cnt==52){
			print(-1),endl;
			continue;
		}
		if(!f)print(num),endl;
		else{
			print(num+1),endl;
		}
	} 
    return 0;
}
2023/9/19 16:58
加载中...