EQSTR - Biến đổi chuỗi
Tác giả: RR
Ngôn ngữ: C++
#include <iostream>
#include <algorithm>
#define FOR(i,a,b) for(int i=a; i<=b; i++)
using namespace std;
int c[30][30],f[30][30];
void init() {
FOR(i,0,25)
FOR(j,0,25)
c[i][j]=1000111;
FOR(i,0,25) c[i][i]=0;
FOR(i,0,24) c[i][i+1]=c[i+1][i]=1;
c[25][0]=c[0][25]=1;
FOR(k,0,25)
FOR(i,0,25)
FOR(j,0,25)
c[i][j]=min(c[i][j],c[i][k]+c[k][j]);
FOR(i,0,25)
FOR(j,0,25) {
int nn=10000;
FOR(k,0,25) nn=min(nn,c[i][k]+c[j][k]);
FOR(k,0,25)
if (c[i][k]+c[j][k]==nn) {
f[i][j]=k;
break;
}
}
}
char s[100],a[100],b[100];
int main() {
init();
scanf("%s\n",&s);
while (s[1]=='C') {
scanf("%s\n",&a);
scanf("%s\n",&b);
FOR(i,0,strlen(a)-1)
printf("%c",'a'+f[(int)a[i]-'a'][(int)b[i]-'a']);
printf("\n");
scanf("%s\n",&s);
}
return 0;
}