Pagini recente » Cod sursa (job #2379379) | Cod sursa (job #3002433) | Cod sursa (job #2689190) | Cod sursa (job #3238953) | Cod sursa (job #2596368)
#include<fstream>
#define N 510
#include<cstring>
#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 D[2][N][N],l,n,dr,m,p,i,j,k,rez;
char s1[N],s2[N];
int main(){
f>>(s1+1);
f>>(s2+1);
n=strlen(s1+1);
m=strlen(s2+1);
l=n+m;
D[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,D[p][j][k]);
continue;
}
if(s1[i+1]==s1[n-j])
ad(D[1-p][j+1][k],D[p][j][k]);
if(m-dr>=1&&s1[i+1]==s2[m-dr])
ad(D[1-p][j][k],D[p][j][k]);
if(s2[k+1]==s1[n-j])
ad(D[p][j+1][k+1],D[p][j][k]);
if(m-dr>=1&&s2[k+1]==s2[m-dr])
ad(D[p][j][k+1],D[p][j][k]);
D[p][j][k]=0;
}
p=1-p;
}
g<<rez;
return 0;
}