Pagini recente » Cod sursa (job #1217294) | Cod sursa (job #289246) | Cod sursa (job #2866959) | Cod sursa (job #1698088) | Cod sursa (job #112246)
Cod sursa(job #112246)
#include <fstream>
#include <string.h>
#include <vector>
#define NMax 501
int n, m, sum, maxsubs, max = -100000;
char a[NMax], b[NMax];
int p[NMax][NMax];
int op[NMax][NMax];
std::vector< int > posx;
std::vector< int > posy;
char subs[100][NMax];
void citire();
void pd();
int main()
{
citire();
pd();
return 0;
}
void pd()
{
int i, j;
for (i=n-1; i>=0; i--)
for (j=m-1; j>=0; j--)
{
if ( a[i] == b[j] )
{
p[i][j] = 1 + p[i+1][j+1];
op[i][j] = 1;
}
else
{
p[i][j] = p[i+1][j];
op[i][j] = 2;
if ( p[i][j] < p[i][j+1] )
{
p[i][j] = p[i][j+1];
op[i][j] = 3;
}
}
if ( p[i][j] > max )
{
max = p[i][j];
sum = 1;
continue;
}
if ( p[i][j] == max )
sum++;
}
for (i=0; i<n; i++)
for (j=0; j<m; j++)
if ( p[i][j] == max && op[i][j] == 1 )
{
posx.push_back( i );
posy.push_back( j );
}
int x, y, ok, rec = posx.size();
maxsubs = 0;
char aux[NMax], lg = 0;
for (i=0; i<rec; i++)
{
aux[0] = NULL; lg = 0;
x = posx[i]; y = posy[i];
while ( x < n && y < m )
{
aux[lg++] = a[x];
if ( op[x][y] == 1 )
{
x++, y++;
continue;
}
if ( op[x][y] == 2 )
{
x++;
continue;
}
if ( op[x][y] == 3 )
{
y++;
continue;
}
}
aux[lg] = NULL;
for (j=0, ok=1; j<maxsubs && ok ; j++)
if ( strcmp( subs[j], aux ) == 0 )
ok = 0;
if ( ok )
strcpy( subs[maxsubs++], aux );
}
std::ofstream fout( "subsir.out" );
//fout << sum << '\n';
fout << maxsubs << '\n';
}
void citire()
{
std::ifstream f( "subsir.in" );
f >> a >> b;
f.close();
n = strlen( a );
m = strlen( b );
}