Pagini recente » Cod sursa (job #2617290) | Cod sursa (job #2644784) | Cod sursa (job #1104351) | Monitorul de evaluare | Cod sursa (job #743478)
Cod sursa(job #743478)
#include<iostream>
#include<fstream>
#include<string.h>
using namespace std;
ifstream in("subsir.in");
ofstream out("subsir.out");
const int N = 505;
const int M = 666013;
char a[N],b[N];
int rez[N][N],nr[N][N],n,m;
int main() {
int i,j;
in.getline(a + 1,N);
in.getline(b + 1,N);
n = strlen(a + 1); m = strlen(b + 1); ++n; ++m;
for(i = 0; i!=n; ++i)
nr[i][0] = 1;
for(i = 0; i!=m; ++i)
nr[0][i] = 1;
for(i = 1; i!=n; ++i)
for(j = 1; j!=m; ++j) {
if(a[i] == b[j]) {
rez[i][j] = rez[i-1][j-1] + 1;
nr[i][j] = nr[i-1][j-1];
continue;
}
rez[i][j] = max(rez[i][j - 1], rez[i - 1][j]);
if(rez[i - 1][j] > rez[i][j - 1]) {
nr[i][j] = nr[i - 1][j];
continue;
}
if(rez[i - 1][j] < rez[i][j - 1]) {
nr[i][j] = nr[i][j - 1];
continue;
}
nr[i][j] = (nr[i - 1][j] + nr[i][j - 1])%M;
if(rez[i][j-1] == rez[i-1][j-1])
nr[i][j] = (nr[i][j] + M - nr[i - 1][j - 1])%M;
}
out << nr[n - 1][m - 1] << "\n";
return 0;
}