Pagini recente » Cod sursa (job #2027928) | Istoria paginii runda/12./clasament | Cod sursa (job #2000417) | Cod sursa (job #1040752) | Cod sursa (job #2646790)
#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;
n = s1.size();
m = s2.size();
s1 = "#" + s1;
s2 = "#" + s2;
for(int i = 0; i <= m; i++) {
nr[0][i] = 1;
}
for(int i = 0; i <= n; i++) {
nr[i][0] = 1;
}
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(dp[i][j] == 1) {
nr[i][j] = 1 + nr[i - 1][j - 1];
} else {
nr[i][j] = max(1, nr[i - 1][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] + max(1, 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] + max(1, nr[i - 1][j]) + max(1, nr[i][j - 1])) % MOD;
} else {
dp[i][j] = dp[i][j - 1];
nr[i][j] = (nr[i][j] + max(1, nr[i][j - 1])) % MOD;
}
if( 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];
///abcabc
///ab
return 0;
}