Pagini recente » Cod sursa (job #1114488) | Cod sursa (job #855700) | Cod sursa (job #925005) | Cod sursa (job #15155) | Cod sursa (job #319867)
Cod sursa(job #319867)
#include <iostream>
#include <fstream>
using namespace std;
char str[2][501];
int tl;
int ssize[2];
long matrix[2][501][501];
long setMatrixElem(int i,int n1,int n2) {
long sum = 0;
int s1p1 = n1-1;
int s1p2 = ssize[0]-n2;
int s2p1 = i-n1-1;
int s2p2 = ssize[1]-(i-n2);
int mfi = (i-1)%2;
if (s1p1>=s1p2)
return 0;
if (s2p1>=s2p2)
return 0;
if ((n1<=i-1)&&(n2<=i-1)) {
if (str[1][s2p1] == str[1][s2p2])
sum += matrix[mfi][n1][n2];
}
if ((n1<=i-1)&&(n2>0)) {
if (str[1][s2p1] == str[0][s1p2])
sum += matrix[mfi][n1][n2-1];
}
if ((n1>0)&&(n2<=i-1)) {
if (str[0][s1p1] == str[1][s2p2])
sum += matrix[mfi][n1-1][n2];
}
if ((n1>0)&&(n2>0)) {
if (str[0][s1p1] == str[0][s1p2])
sum += matrix[mfi][n1-1][n2-1];
}
return sum % 3210121;
}
int main() {
matrix[0][0][0] = 1;
ifstream fin("iv.in");
ofstream fout("iv.out");
fin>>str[0];
fin>>str[1];
ssize[0] = strlen(str[0]);
ssize[1] = strlen(str[1]);
tl = ssize[0] + ssize[1];
for (int i=1;i<=tl/2;i++) {
//cout<<endl;
for (int n1 = 0;n1<=i;n1++) {
//cout<<endl;
for (int n2 = 0;n2<=i;n2++) {
matrix[i%2][n1][n2] = setMatrixElem(i,n1,n2);
//cout<<matrix[i%2][n1][n2]<<" ";
}
}
}
long sum = 0;
for (int i=0;i<=ssize[0];i++)
sum += matrix[(tl/2)%2][i][ssize[0]-i];
if (tl%2==1) {
for (int i=0;i<ssize[0];i++)
sum += matrix[(tl/2)%2][i][ssize[0]-i-1];
}
fout<<sum % 3210121<<endl;
fin.close();
fout.close();
return 0;
}