Pagini recente » Cod sursa (job #3186956) | Cod sursa (job #3223599) | Cod sursa (job #3178054) | Cod sursa (job #2060710) | Cod sursa (job #2938553)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("iv.in");
ofstream fout("iv.out");
const int NMAX = 500;
const int MOD = 3210121;
int dp[2][NMAX + 1][NMAX + 1];
int main(){
string s1, s2;
fin >> s1 >> s2;
int n1 = s1.size();
int n2 = s2.size();
s1 = "$" + s1;
s2 = "$" + s2;
dp[0][0][0] = 1;
int ans = 0;
for(int i = 0; i <= n1; i++)
for(int j = 0; i + j <= n1; j++)
for(int k = 0; k <= n2; k++){
int l = i + k - j; // optimizare cu un factor de N
if(l < 0 || l + k > n2)
continue;
if(i + j + k + l == n1 + n2 || i + j + k + l == n1 + n2 - 1)
(ans += dp[i % 2][j][k]) %= MOD;
if(s1[i + 1] == s1[n1 - j])
(dp[(i + 1) % 2][j + 1][k] += dp[i % 2][j][k]) %= MOD;
if(l < n2 && s1[i + 1] == s2[n2 - l])
(dp[(i + 1) % 2][j][k] += dp[i % 2][j][k]) %= MOD;
if(s2[k + 1] == s1[n1 - j])
(dp[i % 2][j + 1][k + 1] += dp[i % 2][j][k]) %= MOD;
if(l < n2 && s2[k + 1] == s2[n2 - l])
(dp[i % 2][j][k + 1] += dp[i % 2][j][k]) %= MOD;
dp[i][j][k] = 0;
}
fout << ans << '\n';
return 0;
}