Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- By: facug91
- From:
- Name:
- Number:
- Date: 30/08/2014
- */
- #include <bits/stdc++.h>
- #define MAX_INT 2147483647
- #define MAX_LONG 9223372036854775807ll
- #define MAX_ULONG 18446744073709551615ull
- #define MAX_DBL 1.7976931348623158e+308
- #define EPS 1e-9
- const double PI = 2.0*acos(0.0);
- #define INF 1000000000
- //#define MOD 1000000007
- //#define MAXN 6005
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> ii;
- int sizes, sizet, sizett, LD[4010][2010], limit;
- char s[2010], t[4010], action[4010][2010];
- void ld () {
- int i, j, size1 = sizes, size2 = sizet*2, cha, ins, del;
- for (j=0; j<=size1; j++)
- LD[0][j] = j;
- for (i=0; i<=size2; i++)
- LD[i][0] = i;
- for (i=1; i<=size2; i++) {
- for (j=1; j<=size1; j++) {
- cha = LD[i-1][j-1] + (s[j-1] != t[i-1]);
- ins = LD[i-1][j] + 1;
- del = LD[i][j-1] + 1;
- if (cha <= ins && cha <= del) {
- LD[i][j] = cha;
- if (s[j-1] == t[i-1]) action[i][j] = 'N';
- else action[i][j] = 'C';
- } else if (del <= ins && del <= cha) {
- LD[i][j] = del;
- action[i][j] = 'D';
- } else {
- LD[i][j] = ins;
- action[i][j] = 'I';
- }
- }
- }
- }
- int count (int i, int j) {
- if (i == limit && j == 0) return 0;
- if (j == 0) return i-limit;
- if (i == limit) return j;
- if (action[i][j] == 'N') return count(i-1, j-1);
- if (action[i][j] == 'C') return count(i-1, j-1) + 1;
- if (action[i][j] == 'D') return count(i, j-1) + 1;
- if (action[i][j] == 'I') return count(i-1, j) + 1;
- }
- int main () {
- int i, j;
- gets(s);
- gets(t);
- sizes = strlen(s);
- sizet = strlen(t);
- for (i=0; i<sizet; i++)
- t[sizet+i] = t[i];
- sizett = sizet*2;
- t[sizett] = 0;
- ld();
- for (i=sizet; i<sizett; i++) {
- limit = i-sizet;
- printf("%d\n", count(i, sizes));
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement