Pagini recente » Cod sursa (job #835703) | Cod sursa (job #72409) | Cod sursa (job #427508) | Cod sursa (job #2381475) | Cod sursa (job #3189334)
#include <bits/stdc++.h>
using namespace std;
ifstream f("subsir.in");
ofstream g("subsir.out");
const int NMAX=502,MOD=666013;
bool a[NMAX],b[NMAX];
char s1[NMAX],s2[NMAX];
int d[NMAX][NMAX],n,m,p,k;
bool citire()
{
f.getline(s1,NMAX);
f.getline(s2,NMAX);
n=strlen(s1);
m=strlen(s2);
}
void aflare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(s1[i-1]==s2[j-1])
{
if(a[i]==0 && b[j]==0)
{
p++;
a[i]=1;
b[j]=1;
}
d[i][j]=d[i-1][j-1]+1;
}
else
d[i][j]=max(d[i-1][j],d[i][j-1]);
}
}
k=d[n][m];
}
int powlg(int x,int p)
{
int v=1;
while(p>0)
{
if(p%2==0)
{
x=1LL*x*x%MOD;
p/=2;
}
else
{
v=1LL*v*x%MOD;
p--;
}
}
return v;
}
inline int invMod(int n)
{
return powlg(n,MOD-2);
}
int comb(int n,int k)
{
if(k>n-k)
k=n-k;
int f=1,c=1;
for(int i=1;i<=k;i++)
{
c=1LL*c*(n-i+1)%MOD;
f=1LL*f*i%MOD;
}
c=1LL*c*invMod(f)%MOD;
return c;
}
int main()
{
citire();
aflare();
g<<comb(p,k);
return 0;
}