标签:状态 out 输出 NPU print oca res nbsp put
给定两个长度为n的由小写字母组成的字符串
每次可以花费1的代价,指定两个字母,把其中一个全部变为另一个
求使两个字符串相同的最小花费
n <= 100000
3 abb dad
输出 #1
2 a d b a
输入 #2
8 drpepper cocacola
输出 #2
7 l e e d d c c p p o o r r a
一开始自己没看懂题目,以为是对当前状态进行对应的修改,后来发现其实就是个并查集是捆绑修改的
#include<bits/stdc++.h> using namespace std; int fa[30]; int find(int x) { if(fa[x]==x)return x; return fa[x]=find(fa[x]); } int sum; char ans1[200],ans2[200]; char s1[100001],s2[100001]; int main() { int n; cin>>n; for(int i=0; i<=26; i++)fa[i]=i; for(int i=1; i<=n; i++) { cin>>s1[i]; } for(int j=1; j<=n; j++) { cin>>s2[j]; } for(int i=1; i<=n; i++) { int xx=find(s1[i]-‘a‘); int yy=find(s2[i]-‘a‘); if(xx!=yy) { sum++; ans1[sum]=s1[i]; ans2[sum]=s2[i]; fa[xx]=yy; } } cout<<sum<<endl; for(int i=1; i<=sum; i++) { printf("%c %c\n",ans1[i],ans2[i]); } return 0; }
标签:状态 out 输出 NPU print oca res nbsp put
原文地址:https://www.cnblogs.com/Larry-Zero/p/11768299.html