Pagini recente » Cod sursa (job #33360) | Cod sursa (job #354913) | Cod sursa (job #1496525) | Cod sursa (job #2109174) | Cod sursa (job #2938557)
#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;
int ind = 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[ind][j][k]) %= MOD;
if(s1[i + 1] == s1[n1 - j])
(dp[1 - ind][j + 1][k] += dp[ind][j][k]) %= MOD;
if(l < n2 && s1[i + 1] == s2[n2 - l])
(dp[1 - ind][j][k] += dp[ind][j][k]) %= MOD;
if(s2[k + 1] == s1[n1 - j])
(dp[ind][j + 1][k + 1] += dp[ind][j][k]) %= MOD;
if(l < n2 && s2[k + 1] == s2[n2 - l])
(dp[ind][j][k + 1] += dp[ind][j][k]) %= MOD;
dp[ind][j][k] = 0;
}
ind = 1 - ind;
}
fout << ans << '\n';
return 0;
}