Pagini recente » Cod sursa (job #8002) | Cod sursa (job #1736132) | Cod sursa (job #1500470) | Cod sursa (job #2496739) | Cod sursa (job #792269)
Cod sursa(job #792269)
#include<fstream>
#include<string.h>
#define dim 510
#define mod 3210121
using namespace std;
ifstream f("iv.in");
ofstream g("iv.out");
int i,j,x1,y1,k,n,m;
int L,ans;
int D[dim][dim],Dx[dim][dim];
char A[dim],B[dim];
int main () {
f>>(A+1);
f>>(B+1);
n=strlen(A+1);
m=strlen(B+1);
L=(n+m)/2;
Dx[0][0]=1;
for( k=0 ; k <L ;++k ) {
for(x1=0; x1<=k; ++x1 ) {
for(y1=0; y1<=k && y1+x1<=n ;++y1 ) {
int x2=k-x1;
int y2=k-y1;
if( x1+y1< n ) {
if(x1+y1<n-1){
if(A[x1+1]==A[n-y1]){
D[x1+1][y1+1]+=Dx[x1][y1];
if(D[x1+1][y1+1]>=mod)
D[x1+1][y1+1]-=mod;
}
}
if(x2+y2<m){
if(A[x1+1]==B[m-y2]){
D[x1+1][y1]+=Dx[x1][y1];
if(D[x1+1][y1]>=mod)
D[x1+1][y1]-=mod;
}
}
}
if(x2+y2<m){
if(x1+y1<n){
if(B[x2+1]==A[n-y1]) {
D[x1][y1+1]+=Dx[x1][y1];
if(D[x1][y1+1]>=mod)
D[x1][y1+1]-=mod;
}
}
if(x2+y2<m-1){
if( B[x2+1]==B[m-y2] ) {
D[x1][y1]+=Dx[x1][y1];
if(D[x1][y1]>=mod)
D[x1][y1]-=mod;
}
}
}
}
}
for(x1=0;x1<=k+1;++x1){
for( y1=0;y1<=k+1 && x1+y1<=n ;++y1){
Dx[x1][y1]=D[x1][y1];
D[x1][y1]=0;
}
}
}
ans=0;
for(i=0;i<=L;++i)
for(j=0;j<=L && j+i<=L;++j ){
ans+=Dx[i][j];
if(ans>=mod)
ans-=mod;
}
g<<ans<<"\n";
return 0;
}