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++;    }}

原创粉丝点击