UVa164 - String Computer
来源:互联网 发布:java教学视频高清 编辑:程序博客网 时间:2024/06/13 15:37
#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 20 + 10;char s1[N], s2[N];int f[N][N];int k;void output(int n, int m);int main(){ int len1, len2; int val;#ifndef ONLINE_JUDGE freopen("uva_in.txt", "r", stdin);#endif while (scanf("%s", &s1[1]) == 1) { if (strcmp(&s1[1], "#") == 0) break; scanf("%s", &s2[1]); len1 = strlen(&s1[1]); len2 = strlen(&s2[1]); f[0][0] = 0; for (int i = 1; i <= len1; i++) f[i][0] = i; for (int i = 1; i <= len2; i++) f[0][i] = i; for (int i = 1; i <= len1; i++) { for (int j = 1; j <= len2; j++) { val = (s1[i] == s2[j] ? 0 : 1); f[i][j] = min(f[i - 1][j - 1] + val, min(f[i - 1][j] + 1, f[i][j - 1] + 1)); } } k = 0; output(len1, len2); printf("E\n"); }}void output(int n, int m){ if (n > 0 && m == 0) { for (int i = 1; i <= n; i++) { printf("D%c%.2d", s1[i], 1); k--; //printf("1\n"); } return; } else if (n == 0 && m > 0) { for (int i = 1; i <= m; i++) { printf("I%c%.2d", s2[i], i); k++; //printf("2\n"); } return; } else if (n <= 0 || m < 0) { return; } if (s1[n] == s2[m]) { output(n - 1, m - 1); } else if (f[n][m] == f[n - 1][m - 1] + 1) { output(n - 1, m - 1); //printf("k=%d\n", k); printf("C%c%.2d", s2[m], n + k); } else if (f[n][m] == f[n - 1][m] + 1) { //k--; output(n - 1, m); //k++; printf("D%c%.2d", s1[n], n + k); //printf("3\n"); k--; } else if (f[n][m] == f[n][m - 1] + 1) { //k++; output(n, m - 1); // k--; printf("I%c%.2d", s2[m], n + k + 1); //printf("4\n"); k++; }}