Pagini recente » Cod sursa (job #1644858) | Cod sursa (job #1176725) | Cod sursa (job #2034608) | Cod sursa (job #201393) | Cod sursa (job #750959)
Cod sursa(job #750959)
#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
ifstream in("iv.in");
ofstream out("iv.out");
const int N = 505;
const int M = 3210121;
char a[N], b[N];
int l1, l2, d[2][N][N], rez, L;
int main() {
int i,j,k,l;
in.getline(a + 1, N);
in.getline(b + 1, N);
l1 = strlen(a + 1);
l2 = strlen(b + 1);
L = l1 + l2;
d[0][0][0] = 1;
for(i = 0; i<=l1; ++i) {
for(j = 0; j<=l2; ++j)
for(k = 0; k + i <= l1; ++k) {
l = i + j - k;
if(l + j <= l2) {
if(i + j + k + l == L || i + j + k + l == L - 1)
rez = (rez + d[0][j][k])%M;
if(a[i + 1] == a[l1 - k])
d[1][j][k + 1] = (d[1][j][k + 1] + d[0][j][k])%M;
if(a[i + 1] == b[l2 - l])
d[1][j][k] = (d[1][j][k] + d[0][j][k])%M;
if(b[j + 1] == a[l1 - k])
d[0][j + 1][k + 1] = (d[0][j + 1][k + 1] + d[0][j][k])%M;
if(b[j + 1] == b[l2 - l])
d[0][j + 1][k] = (d[0][j + 1][k] + d[0][j][k])%M;
}
}
for(j = 0; j<=l2; ++j)
for(k = 0; k<=l1; ++k)
d[0][j][k] = d[1][j][k], d[1][j][k] = 0;
}
out << rez << "\n";
return 0;
}