Pagini recente » Cod sursa (job #884231) | Cod sursa (job #1266589) | Cod sursa (job #1935719)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
using namespace std;
ifstream fin("adn.in");
ofstream fout("adn.out");
const int MAX = 18;
int N;
vector<string> a, s;
int D[1<<MAX][MAX];
int b[MAX][MAX];
void Read();
void Solve();
bool Check( string a, string b, int p );
int main()
{
Read();
Solve();
fin.close();
fout.close();
return 0;
}
void Read()
{
fin >> N; fin.get();
a = vector<string>(N);
for ( int i = 0; i < N; ++i )
{
fin >> a[i];
}
vector<bool> g(N, 0);
for ( int i = 0; i < N; ++i )
for ( int j = 0; j < N; ++j )
if ( i != j && a[i].size() >= a[j].size() && a[i].find(a[j]) != string::npos )
g[j] = true;
int c{0};
for ( int i = 0; i < N; ++i )
if ( !g[i] )
s.push_back(a[i]);
else
++c;
N -= c;
/* for ( int i = 0; i < N; ++i )
fout << s[i] << '\n'; */
}
void Solve()
{
int i, j;
for ( i = 0; i < N; ++i )
for ( j = 0; j < N; ++j )
if ( i != j )
{
int t, r;
for ( t = min(s[i].size(), s[j].size()) - 1; t >= 0; --t )
if ( Check(s[i], s[j], t) )
{
r = t;
break;
}
D[i][j] = r;
// fout << s[i] << ' ' << s[j] << ' ' << D[i][j] << '\n';
}
}
bool Check( string a, string b, int p )
{
if ( p == 0 ) return true;
int i1 = a.size() - p, i2 = 0;
while ( i1 < a.size() )
if ( a[i1++] != b[i2++] )
return false;
return true;
}