题意:
解法:
当字符种类>10时,一定无解,
否则全排列枚举数字分配方案,判断是否有解即可.
复杂度O(10!).
code:
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxm=2e6+5;
int s[maxm];
string a,b,c;
void solve(){
cin>>a>>b>>c;
map<char,int>mp;
for(auto i:a)mp[i]=1;
for(auto i:b)mp[i]=1;
for(auto i:c)mp[i]=1;
if(mp.size()>10){
cout<<"UNSOLVABLE"<<endl;
return ;
}
for(int i=0;i<10;i++)s[i]=i;
do{
map<char,int>mp2;
int j=0;
for(auto i:mp){
mp2[i.first]=s[j++];
}
if(mp2[a[0]]==0||mp2[b[0]]==0||mp2[c[0]]==0)continue;
int x=0,y=0,z=0;
for(auto i:a)x=x*10+mp2[i];
for(auto i:b)y=y*10+mp2[i];
for(auto i:c)z=z*10+mp2[i];
if(x+y==z){
cout<<x<<endl;
cout<<y<<endl;
cout<<z<<endl;
return ;
}
}while(next_permutation(s,s+10));
cout<<"UNSOLVABLE"<<endl;
}
signed main(){
ios::sync_with_stdio(0);
solve();
return 0;
}