HELP
查看原帖
HELP
785630
YangXiaopei楼主2023/9/19 15:45

只有6分

AC 第一个点

#include<bits/stdc++.h>
#define int long long
using namespace std;
int q, d[105];
bool search(string s, string f){
	map<int, int> mp, mq;
	int n = s.size();
	for(int i = 0; i < n; i++){
		int c, w;
		if(s[i] < 'a'){
			c = s[i] - 'A' + 1;
		}
		else{
			c = s[i] - 'a' + 1 + 26;
		}
		if(f[i] < 'a'){
			w = f[i] - 'A' + 1;
		}
		else{
			w = f[i] - 'a' + 1 + 26;
		}
		mq[w]++;
		if(mp.count(c) == 1 && mp[c] != w){
			return 1;
		}
		mp[c] = w;
	}
	if(mq.size() == 52 && s != f){
		return 1;
	}
	return 0;
}
vector<int> v[105];
int e = 0;
bool dfs(int x, int y){
	if(x == y && e == 1){
		return 1;
	}
	e = 1;
	if(d[x] == 1 || v[x].size() != 1){
		return 0;
	}
	d[x] = 1;
	for(int i = 0; i < v[x].size(); i++){
		if(!d[v[x][i]] || v[x][i] == y){
			return dfs(v[x][i], y);
		}
	}
}
signed main(){
	cin >> q;
	while(q--){
		string s, f;
		cin >> s >> f;
		if(search(s, f)){
			cout << -1 << "\n";
			continue;	
		}
		memset(d, -1, sizeof(d));
		int n = s.size(), cnt = 0, t[105][105];
		for(int i = 0; i < s.size(); i++){
			int c, w;
			if(s[i] < 'a'){
				c = s[i] - 'A' + 1;
			}
			else{
				c = s[i] - 'a' + 1 + 26;
			}
			if(f[i] < 'a'){
				w = f[i] - 'A' + 1;
			}
			else{
				w = f[i] - 'a' + 1 + 26;
			}
			d[c] = 0;
			if(t[c][w] || c == w){
				continue;
			}
			t[c][w] = 1;
			cnt++;
			v[c].push_back(w);
		}
		for(int i = 1; i <= 52; i++){
			if(!d[i]){
				e = 0;
				if(dfs(i, i)){
					cnt++;
				}
				d[i] = 1;
			}
		}
		cout << cnt << "\n";
	}
	return 0;
}

按第一篇题解思路写的,为啥不对

2023/9/19 15:45
加载中...