Pagini recente » Cod sursa (job #366524) | Cod sursa (job #2778126) | Cod sursa (job #2092480) | Cod sursa (job #70320) | Cod sursa (job #2868273)
#include <bits/stdc++.h>
using namespace std;
ifstream in("subsir.in");
ofstream out("subsir.out");
#define mod 666013
char sir1[505],sir2[505];
int dp[505][505],ans[505][505];
int main()
{
int n,m,i,j;
in>>sir1+1>>sir2+1;
n=strlen(sir1+1);
m=strlen(sir2+1);
if(n<m)
{
for(i=1; i<=m; ++i)
swap(sir1[i],sir2[i]);
swap(n,m);
}
for(i=0;i<=m;++i)
ans[0][i]=1;
for(i=0;i<=n;++i)
ans[i][0]=1;
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
{
if(sir1[i]==sir2[j])
{
dp[i][j]=dp[i-1][j-1];
ans[i][j]=ans[i-1][j-1];
}
else
{
if(dp[i-1][j]>dp[i][j-1])
{
dp[i][j] = dp[i-1][j];
ans[i][j] = ans[i-1][j];
}
if(dp[i][j-1]>dp[i-1][j])
{
dp[i][j] = dp[i][j-1];
ans[i][j] = ans[i][j-1];
}
if(dp[i-1][j]==dp[i][j-1]){
dp[i][j] = dp[i-1][j];
ans[i][j] = ans[i][j-1]+ans[i-1][j];
if(dp[i-1][j]==dp[i-1][j-1])
ans[i][j]-=ans[i-1][j-1];
ans[i][j]%=mod;
}
}
}
out<<ans[n][m];
return 0;
}