【hihocoder1251】Today is a rainy day

时间:2023-03-09 06:05:33
【hihocoder1251】Today is a rainy day
#include<bits/stdc++.h>
const int N=;
const int M=5e4+;
const int inf=0x3f3f3f3f;
using namespace std;
char s1[N],s2[N];
int c[],f[][],dis[M];
inline int Index(int *a){
int ans=;
for(int i=;i<;i++)ans=ans*+a[i];
return ans;
}
inline void hs(int x,int *a){
for(int i=;i>=;i--)a[i]=x%,x/=;
}
inline void bfs(){
memset(dis,,sizeof(dis));int b[];
for(int i=;i<;i++)b[i]=i;
int x=Index(b);dis[x]=;
static queue<int> q;q.push(x);
while(!q.empty()){
int u=q.front();q.pop();
hs(u,b);
for(int i=;i<;i++)for(int j=;j<;j++){
int t[];memcpy(t,b,sizeof(t));
for(int k=;k<;k++)if(t[k]==i)t[k]=j;
int v=Index(t);
if(dis[v]>dis[u]+)dis[v]=dis[u]+,q.push(v);
}
}
}
int main(){
freopen("ff.in","r",stdin);
freopen("dick.out","w",stdout);
bfs();
while(~scanf("%s%s",s1,s2)){
int len=strlen(s1);
memset(c,,sizeof(c));memset(f,,sizeof(f));
for(int i=;i<len;i++){
int x=s2[i]-'',y=s1[i]-'';c[x]++;f[x][y]++;
}
int ans=inf,b[];
for(int i=;i<M;i++){
hs(i,b);int tmp=dis[i];
for(int j=;j<;j++)tmp+=c[j]-f[j][b[j]];
ans=min(ans,tmp);
}
printf("%d\n",ans);
}
}

【hihocoder1251】Today is a rainy day