Pagini recente » Cod sursa (job #2988596) | Cod sursa (job #1165584) | Cod sursa (job #1401070) | Cod sursa (job #2665484) | Cod sursa (job #2483337)
#include <fstream>
#include <cstring>
#define DIM 510
#define mod 3210121
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
int i,j,l1,l2,L,sol,d[DIM][DIM][DIM]; //d[L][i][j]=nr de palindromuri de lungime L cu primele
char A[DIM],B[DIM]; //i litere din A si ultimele j din A(adica primele
int main() { //L-i din B si ultimele L-j din B
fin>>A+1>>B+1;
l1=strlen(A+1);
l2=strlen(B+1);
if (A[1]==A[l1])
d[1][1][1]=1;
if (A[1]==B[l2])
d[1][1][0]=1;
if (B[1]==B[l2])
d[1][0][0]=1;
if (B[1]==A[l1])
d[1][0][1]=1;
for (L=2;L<=(l1+l2)/2;L++) {
for (i=0;i<=l1&&i<=L;i++) {
for (j=0;j<=l2&&j<=L;j++) {
if (i>0&&j>0&&A[i]==A[l1-j+1]) {
d[L][i][j]+=d[L-1][i-1][j-1];
if (d[L][i][j]>=mod)
d[L][i][j]-=mod;
}
if (i>0&&j<L&&A[i]==B[l2-L+j+1]) {
d[L][i][j]+=d[L-1][i-1][j];
if (d[L][i][j]>=mod)
d[L][i][j]-=mod;
}
if (i<L&&j>0&&B[L-i]==A[l1-j+1]) {
d[L][i][j]+=d[L-1][i][j-1];
if (d[L][i][j]>=mod)
d[L][i][j]-=mod;
}
if (i<L&&j<L&&B[L-i]==B[l2-L+j+1]) {
d[L][i][j]+=d[L-1][i][j];
if (d[L][i][j]>=mod)
d[L][i][j]-=mod;
}
}
}
}
if ((l1+l2)%2==0) {
for (i=0;i<=l1;i++) {
sol+=d[(l1+l2)/2][i][l1-i];
if (sol>=mod)
sol-=mod;
}
}
else {
for (i=0;i<l1;i++) {
sol+=d[(l1+l2)/2][i][l1-i-1]+d[(l1+l2)/2][i][l1-i];
if (sol>=mod)
sol-=mod;
}
}
fout<<sol;
return 0;
}