Pagini recente » Cod sursa (job #695906) | Cod sursa (job #285545) | Cod sursa (job #1207550) | Cod sursa (job #284077) | Cod sursa (job #792844)
Cod sursa(job #792844)
#include<stdio.h>
#include<cstring>
FILE*f=fopen("iv.in","r");
FILE*g=fopen("iv.out","w");
char v[502],w[502];
int n,m,a[502][502],b[502][502],sol,mod;
int main()
{
fscanf(f,"%s%s",v+1,w+1);
n=strlen(v+1);
m=strlen(w+1);
int x=(n+m)/2;
mod=3210121;
a[0][0]=1;
for(int i=1;i<=x;++i)
{
for(int j=0;j<=n&&i-j<=m;++j)
for(int k=0;k<=n&&i-k<=m&&j+k<=n&&i+i-j-k<=m;++k)
{
if(j&&n-k+1<=n&&v[j]==v[n-k+1])
b[j][k]=(b[j][k]+a[j-1][k-1])%3210121;
if(i-j>0&&n-i+k+1<=m&&w[i-j]==w[n-i+k+1])
b[j][k]=(b[j][k]+a[j][k])%mod;
if(j&&n-i+k+1<=m&&v[j]==w[n-i+k+1])
b[j][k]=(b[j][k]+a[j-1][k])%mod;
if(i-j>0&&n-k+1<=n&&w[i-j]==v[n-k+1])
b[j][k]=(b[j][k]+a[j][k-1])%mod;
}
for(int j=0;j<=n&&i-j<=m;++j)
for(int k=0;k<=n&&i-k<=m&&j+k<=n&&i+i-j-k<=m;++k)
a[j][k]=b[j][k];
}
for(int j=0;j<=n&&x-j<=m;++j)
for(int k=0;k<=n&&x-k<=m&&j+k<=n&&x+x-j-k<=m;++k)
sol=(sol+a[j][k])%mod;
fprintf(g,"%d",sol);
fclose(f);
fclose(g);
return 0;
}