Pagini recente » Cod sursa (job #3176658) | Cod sursa (job #3170426) | Cod sursa (job #3269202) | Cod sursa (job #3221616) | Cod sursa (job #2533264)
#include <iostream>
#include <fstream>
#include <cstring>
#define MOD 3210121
#define Nmax 505
using namespace std;
ifstream f("iv.in");
ofstream g("iv.out");
char a[Nmax], b[Nmax];
int dp[3][Nmax][Nmax]; // inca, sfa, incb
int ans=0;
int mod(int x)
{
if(x >= MOD) x -= MOD;
return x;
}
void add(int &a, int b)
{
a+=b;
a=mod(a);
}
int main()
{
f >> a+1 >> b+1;
int n=strlen(a+1), m=strlen(b+1);
dp[0][0][0]=1;
for (int i = 0; i <= n; i++)
{
for (int j = 0; j+i <= n; j++)
{
for (int k = 0; k <= m; k++)
{
int l=i+k-j;
if (l < 0 || k+l > m) continue;
if (l+i+j+k == n+m || l+i+j+k == m+n-1)
{
add(ans, dp[i%2][j][k]);
continue;
}
if (a[i+1] == a[n-j]) add(dp[(i+1)%2][j+1][k], dp[i%2][j][k]);
if (a[i+1]==b[m-l]) add(dp[(i+1)%2][j][k], dp[i%2][j][k]);
if (b[k+1]==a[n-j]) add(dp[i%2][j+1][k+1], dp[i%2][j][k]);
if (b[k+1]==b[m-l]) add(dp[i%2][j][k+1], dp[i%2][j][k]);
dp[i%2][j][k]=0;
}
}
}
g << ans;
return 0;
}