求助!
  • 板块CF33B String Problem
  • 楼主dxt_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/29 11:20
  • 上次更新2024/7/29 12:44:38
查看原帖
求助!
542199
dxt_楼主2024/7/29 11:20
#include<bits/stdc++.h>
using namespace std;
char s1[105],s2[105];
long long mp[30][30],max1[1005];
long long ans;
void print(int a){
	if(a==1) cout<<"a";
	if(a==2) cout<<"b";
	if(a==3) cout<<"c";
	if(a==4) cout<<"d";
	if(a==5) cout<<"e";
	if(a==6) cout<<"f";
	if(a==7) cout<<"g";
	if(a==8) cout<<"h";
	if(a==9) cout<<"i";
	if(a==10) cout<<"j";
	if(a==11) cout<<"k";
	if(a==12) cout<<"l";
	if(a==13) cout<<"m";
	if(a==14) cout<<"n";
	if(a==15) cout<<"o";
	if(a==16) cout<<"p";
	if(a==17) cout<<"q";
	if(a==18) cout<<"r";
	if(a==19) cout<<"s";
	if(a==20) cout<<"t";
	if(a==21) cout<<"u";
	if(a==22) cout<<"v";
	if(a==23) cout<<"w";
	if(a==24) cout<<"x";
	if(a==25) cout<<"y";
	if(a==26) cout<<"z";
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(NULL);cout.tie(NULL);
	memset(max1,-1,sizeof max1);
	for(int i=1;i<=26;++i)
	for(int j=1;j<=26;++j)
	mp[i][j]=10000000005;
	for(int i=1;i<=30;++i) mp[i][i]=0; 
	cin>>s1;cin>>s2;
	int n=strlen(s1);
	int m=strlen(s2);
	int q;cin>>q;
	while(q--){
		char s[6];
		char a,b;long long c;
		cin>>a>>b>>c;
		mp[a-96][b-96]=min(c,mp[a-96][b-96]);//从a到b的最小转化 
	}
	if(n!=m){
		printf("-1");
		return 0;
	}
	for(int k=1;k<=26;++k)
	for(int i=1;i<=26;++i)
	for(int j=1;j<=26;++j){
		mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
	}
	for(int i=0;i<n;++i){
		long long maxn=10000000005;
		if(s1[i]==s2[i]){
			max1[i]=s1[i]-96;
			continue;
		}
		for(int k=1;k<=26;++k){
			if(mp[s1[i]-96][k]+mp[s2[i]-96][k]<maxn&&mp[s1[i]-96][k]+mp[s2[i]-96][k]<=500000){
				maxn=mp[s1[i]-96][k]+mp[s2[i]-96][k];
				max1[i]=k;
			}
		}
		if(max1[i]==-1) {
			cout<<"-1";
			return 0;
		}
		ans+=maxn;
	}
//	cout<<max1[0]<<endl<<max1[1]<<endl<<max1[2]<<endl<<max1[3]<<endl;
	cout<<ans<<endl;
	for(int i=0;i<n;++i) print(max1[i]);
	cout<<endl;
	return 0;
}
2024/7/29 11:20
加载中...