代码求调
查看原帖
代码求调
726098
hytallenxu楼主2023/11/5 10:09

rt,有哪位大佬可以帮忙看眼的awa

AC on #1~9

Code

#include <iostream>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> graph[100];
bool vis[100];
bool vis2[100];
int ans=0;
int cnt=0;
bool flag2=0;
void dfs(int c, int start){
	if(c==start and vis[c]){
	    ans++;
	    flag2=1;
	}
	if(graph[c].size()==0 or vis[c]) return;
	vis[c]=1;
	if(graph[c][0]!=start){
	    
		ans++;
		dfs(graph[c][0],start);
	}
	else if(graph[c][0]==start){
		ans++;
		dfs(start,start);
		return;
	}
}

int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--){
	    flag2=0;
	    cnt=0;
		vector<int> all;
		vector<int> all2[100];
		vector<int> all3[100];
		memset(vis,0,sizeof(vis));
        memset(vis2,0,sizeof(vis2));
		for(int i=1;i<=58;i++){
			graph[i].clear();
		}
		string a, b;
		cin>>a>>b;
		bool flag=0;
		if(a==b){
			cout<<0<<endl;
			continue;
		}
		for(int i=0;i<a.length();i++){
			int letter1=a[i]-'A'+1,letter2=b[i]-'A'+1;
			for(int j=0;j<all2[letter1].size();j++){
				if(all2[letter1][j]!=letter2) flag=1;
			}
			if(flag) break;
			else all2[letter1].push_back(letter2);
			
		}
		if(flag){
			cout<<-1<<endl;
			continue;
		}
		for(int i=0;i<a.length();i++){
			int letter1=a[i]-'A'+1,letter2=b[i]-'A'+1;
			if(!vis2[letter1]){
                cnt++;
                vis2[letter1]=1;
            }

			if(letter1!=letter2){
				graph[letter1].push_back(letter2);
				all3[letter2].push_back(letter1);
				all.push_back(letter1);
			}
			
		}
		
		
		for(int i=0;i<all.size();i++){
			int letter1=all[i];
			if(!vis[letter1] and graph[letter1].size()!=0 and all3[letter1].size()==0) dfs(letter1,letter1);
		}
		for(int i=0;i<all.size();i++){
			int letter1=all[i];
			if(!vis[letter1] and graph[letter1].size()!=0) dfs(letter1,letter1);
		}
		if(flag2 and cnt==52){
		    cout<<-1<<endl;
		    continue;
		}
		cout<<ans<<endl;
		ans=0;
	}
	return 0;
}
2023/11/5 10:09
加载中...