Pagini recente » Cod sursa (job #1997752) | Cod sursa (job #3283075) | Cod sursa (job #2687995) | Cod sursa (job #3264150) | Cod sursa (job #2286629)
#include <bits/stdc++.h>
#define mod 3210121
using namespace std;
ifstream f("iv.in");
ofstream g("iv.out");
void ad(int &a,int b)
{
a+=b;
if(a>=mod)
a-=mod;
}
int a[2][510][510],l,n,dr,m,p,i,j,k,rez;
char s1[510],s2[510];
int main ()
{
f>>(s1+1);
f>>(s2+1);
n=strlen(s1+1);
m=strlen(s2+1);
l=n+m;
a[0][0][0]=1;
p=0;
for(i=0; i<=n; ++i)
{
for(j=0; i+j<=n; ++j)
{
for(k=0; k<=m; ++k)
{
dr=i+k-j;
if(dr<0 || dr+k>m)
{
continue;
}
if(i+j+k+dr==l || i+j+k+dr==l-1)
{
ad(rez,a[p][j][k]);
continue;
}
if(s1[i+1]==s1[n-j])
{
ad(a[1-p][j+1][k],a[p][j][k]);
}
if(m-dr>=1 && s1[i+1]==s2[m-dr])
{
ad(a[1-p][j][k],a[p][j][k]);
}
if(s2[k+1]==s1[n-j])
{
ad(a[p][j+1][k+1],a[p][j][k]);
}
if(m-dr>=1 && s2[k+1]==s2[m-dr])
{
ad(a[p][j][k+1],a[p][j][k]);
}
a[p][j][k]=0;
}
}
p=1-p;
}
g<<rez<<'\n';
return 0;
}