Pagini recente » Cod sursa (job #850011) | Cod sursa (job #1536156) | Cod sursa (job #2975582) | Cod sursa (job #2477361) | Cod sursa (job #2586315)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f ( "iv.in" );
ofstream g ( "iv.out" );
char s1[502], s2[502];
const int MOD = 3210121;
int dp[3][502][502];
int main()
{
f >> s1 + 1 >> s2 + 1;
int l1 = strlen ( s1 + 1 ), l2 = strlen ( s2 + 1 ), rez = 0;
dp[0][0][0] = 1;
for ( int i = 0; i <= l1; i++ )
for ( int j = 0; j + i <= l1; j++ )
for ( int k = 0; k <= l2; k++ )
{
int l = i - j + k;
if ( l < 0 || l + k > l2 )
continue;
if ( ( i + j + k + l ) == ( l2 + l1 - 1 ) || ( i + j + k + l ) == ( l2 + l1 ) )
rez = ( rez + dp[i % 2][j][k] ) % MOD;
else
{
if ( s1[i + 1] == s1[l1 - j] )
dp[ ( i + 1 ) % 2][j + 1][k] = ( dp[ ( i + 1 ) % 2][j + 1][k] + dp[i % 2][j][k] ) % MOD;
if ( s2[k + 1] == s2[l2 - l] )
dp[ i % 2][j][k + 1] = ( dp[i % 2][j][k + 1] + dp[i % 2][j][k] ) % MOD;
if ( s1[i + 1] == s2[l2 - l] )
dp[ ( i + 1 ) % 2][j][k] = ( dp[ ( i + 1 ) % 2][j][k] + dp[i % 2][j][k] ) % MOD;
if ( s1[l1 - j] == s2[k + 1] )
dp[ i % 2][j + 1][k + 1] = ( dp[i % 2][j + 1][k + 1] + dp[i % 2][j][k] ) % MOD;
}
dp[i % 2][j][k] = 0;
}
g << rez;
return 0;
}