Pagini recente » Cod sursa (job #2552663) | Cod sursa (job #1956137) | Cod sursa (job #582107) | Cod sursa (job #2226492) | Cod sursa (job #3284261)
#include <fstream>
using namespace std;
ifstream cin("subsir.in");
ofstream cout("subsir.out");
short int v1[501];
short int v2[501];
short int d[501][501][501];
short int rez[250001][2];
int main()
{
char ch='a';
int ok=0,n=0,m=0,maxi=-1,cnt=0,i,j,k;
while(cin.get(ch))
{
if(ch=='\n')
ok++;
else
{
if(ok==0)
{
n++;
v1[n]=ch-'a'+1;
}
else
{
m++;
v2[m]=ch-'a'+1;
}
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
d[i][j][0]=d[i-1][j][0];
for(int x=1;x<=d[i][j][0];x++)
d[i][j][x]=d[i-1][j][x];
if(d[i][j][0]<d[i][j-1][0])
{
d[i][j][0]=d[i][j-1][0];
for(int x=1;x<=d[i][j][0];x++)
d[i][j][x]=d[i][j-1][x];
}
if(d[i][j][0]<d[i-1][j-1][0]+1 and v1[i]==v2[j])
{
d[i][j][0]=d[i-1][j-1][0]+1;
for(int x=1;x<d[i][j][0];x++)
d[i][j][x]=d[i-1][j-1][x];
d[i][j][d[i][j][0]]=v1[i];
}
if(d[i][j][0]>maxi)
{
maxi=d[i][j][0];
k=1;
rez[k][0]=i;
rez[k][1]=j;
}
else if(d[i][j][0]==maxi)
{
k++;
rez[k][0]=i;
rez[k][1]=j;
}
}
for(i=1;i<=k;i++)
{
if(rez[i][1]!=-1)
{
for(int i1=i+1;i1<=k;i1++)
{
int x=1;
while(d[rez[i][0]][rez[i][1]][x]==d[rez[i1][0]][rez[i1][1]][x] and x<=maxi)
x++;
if(x==maxi+1)
rez[i1][1]=-1;
}
cnt++;
}
}
cout<<cnt;
return 0;
}