Pagini recente » Cod sursa (job #2733869) | Cod sursa (job #2587893) | Cod sursa (job #2803119) | Cod sursa (job #954902) | Cod sursa (job #528736)
Cod sursa(job #528736)
#include<fstream>
#include<string>
#define dim 502
#define modulo 666013
using namespace std;
ifstream f("subsir.in");
ofstream g("subsir.out");
char a[dim],b[dim];
int a1[dim],b1[dim];
int lungimea,lungimeb;
int sol[dim][dim];
int nr[dim];
int n,m;
int inc;
int maxim;
int solutii;
void citire()
{
f.get(a,dim);
f.get();
f.get(b,dim);
f.get();
}
void afisare()
{
int i,j,k,ok=0;
/*g<<a<<"\n";
g<<b<<"\n";
for(i=1;i<=lungimea;i++)
g<<a1[i]<<" ";
g<<"\n";
for(j=1;j<=lungimeb;j++)
g<<b1[j]<<" ";
g<<"\n";
g<<"\n";
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
g<<sol[i][j]<<" ";
g<<"\n";
}
g<<"\n";
g<<sol[n][m]<<"\n";
for(i=inc;i>=1;i--)
g<<nr[i]<<" ";
g<<"\n";
*/
for(i=n;i>=1;i--)
{
for(j=m;j>=i+1;j--)
if(nr[j]==b1[j]&&ok==0)
{
ok=1;
solutii++;
b1[j]=0;
}
}
g<<solutii;//<<"\n";
}
void rezolva()
{
int i,j;
lungimea=strlen(a);
lungimeb=strlen(b);
for(i=0;i<lungimea;i++)
a1[i+1]=a[i]-'0';
for(i=0;i<lungimeb;i++)
b1[i+1]=b[i]-'0';
n=lungimea;
m=lungimeb;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a1[i]==b1[j])
sol[i][j]=sol[i-1][j-1]+1;
else
if(sol[i-1][j]>sol[i][j-1])
sol[i][j]=sol[i-1][j];
else
sol[i][j]=sol[i][j-1];
maxim=sol[n][m];
}
void afisaresub()
{
int i,j;
i=n,j=m;
while(i!=0&&j!=0)
{
if(a1[i]==b1[j])
{
inc++;
nr[inc]=a1[i];
b1[j]=0;
//if(sol[i][j]==maxim)
sol[i][j]=0;
i--;
j--;
}
else
if(sol[i][j]==sol[i-1][j])
i--;
else
if(sol[i][j]==sol[i][j-1])
j--;
}
}
int main()
{
citire();
rezolva();
afisaresub();
afisare();
return 0;
}