Pagini recente » Cod sursa (job #1449058) | Cod sursa (job #2549744) | Cod sursa (job #2573372) | Cod sursa (job #1960118) | Cod sursa (job #725960)
Cod sursa(job #725960)
#include <fstream>
#include <string.h>
#define mod 666013
using namespace std;
ifstream f ("subsir.in");
ofstream g ("subsir.out");
int n,m,rez=0;;
char c1[502],c2[502];
int submax[502][502],comunmax[505][100],lmax;
int lasta[502][27],lastb[502][27];
void citire()
{
f.getline(c1+1,502);
f.getline(c2+1,502);
n=strlen(c1+1);
m=strlen(c2+1);
m++; n++;
}
void dinamic()
{
char ch;
int i,j;
submax[0][0]=0;
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
if(c1[i]==c2[j]) submax[i][j]=1+submax[i-1][j-1];
else if(submax[i][j-1]>submax[i-1][j]) submax[i][j]=submax[i][j-1];
else submax[i][j]=submax[i-1][j];
}
for(i=1;i<n;i++)
{
lasta[i][c1[i]-'a']=i;
for(ch='a';ch<='z';ch++)
{
if(ch==c1[i]) continue;
lasta[i][ch-'a']=lasta[i-1][ch-'a'];
}
}
for(i=1;i<m;i++)
{
lastb[i][c2[i]-'a']=i;
for(ch='a';ch<='z';ch++)
{
if(ch==c2[i]) continue;
lastb[i][ch-'a']=lastb[i-1][ch-'a'];
}
}
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
if(c1[i]==c2[j])
{
if(submax[i][j]==1) {comunmax[i][j]=1; continue;}
int ii,jj;
for(ch='a';ch<='z';ch++)
{
ii=lasta[i-1][ch-'a'];
jj=lastb[j-1][ch-'a'];
if(submax[ii][jj]+1==submax[i][j])
comunmax[i][j]+=comunmax[ii][jj]%mod;
}
}
}
for(i=1;i<n;i++)
for(j=1;j<m;j++)
if(comunmax[i][j] && submax[i][j]==submax[n-1][m-1])
if(lasta[n-1][c1[i]-'a']==i && lastb[m-1][c2[j]-'a']==j)
rez+=comunmax[i][j]%mod;
g<<rez<<"\n";
g.close();
}
int main()
{
citire();
dinamic();
g.close();
return 0;
}