Pagini recente » Cod sursa (job #594126) | Cod sursa (job #2577396) | Cod sursa (job #472921) | Cod sursa (job #1461973) | Cod sursa (job #2646803)
#include <bits/stdc++.h>
using namespace std;
ifstream f("subsir.in");
ofstream g("subsir.out");
const int NMAX = 505;
const int MOD = 666013;
string s1, s2;
int dp[NMAX][NMAX], n, m, nr[NMAX][NMAX];
int main() {
f >> s1;
f >> s2;
cout << s1;
n = s1.size();
m = s2.size();
s1 = "#" + s1;
s2 = "#" + s2;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
if(s1[i] == s2[j]) {
dp[i][j] = 1 + dp[i - 1][j - 1];
if(nr[i - 1][j - 1]) {
nr[i][j] = nr[i - 1][j - 1];
} else {
nr[i][j] = 1;
}
} else {
if(dp[i - 1][j] > dp[i][j - 1]) {
dp[i][j] = dp[i - 1][j];
nr[i][j] = (nr[i][j] + nr[i - 1][j]) % MOD;
} else {
if(dp[i - 1][j] == dp[i][j - 1]) {
dp[i][j] = dp[i - 1][j];
nr[i][j] = (nr[i][j] + nr[i - 1][j] + nr[i][j - 1]) % MOD;
} else {
dp[i][j] = dp[i][j - 1];
nr[i][j] = (nr[i][j] + nr[i][j - 1]) % MOD;
}
if(dp[i - 1][j] == dp[i][j - 1] && dp[i][j] == dp[i - 1][j - 1]) {
nr[i][j] = (nr[i][j] - nr[i - 1][j - 1] + MOD) % MOD;
}
}
}
//cout << nr[i][j] << ' ';
}
//cout << '\n';
}
g << nr[n][m];
return 0;
}