Pagini recente » Cod sursa (job #155723) | Cod sursa (job #1309542) | Cod sursa (job #2692500) | Cod sursa (job #2532023) | Cod sursa (job #2539463)
#include <cstdio>
#include <vector>
#include <string>
#include <iostream>
#include <map>
#include <algorithm>
using namespace std;
const int LMAX = 60;
vector <string> v;
int verif(int l)
{
int i , j , h;
map <long long , int> m;
for(i = 0 ; i < v.size() ; i ++)
{
h = 0;
for(j = 0 ; j < v[i].size() ; j ++)
{
h = h * 2 + v[i][j] - 'a';
if(j >= l - 1)
{
if(m.find(h) != m.end())
m[h] ++;
else
m.insert(make_pair(h , 1));
if(m[h] == v.size())
return 1;
if(v[i][j - l + 1] == 'b')
h = (h ^ (1 << (l - 1)));
}
}
}
return 0;
}
int bs(int lmin)
{
int st , dr , med , last;
st = 1;
dr = lmin;
last = -1;
while(st <= dr)
{
med = (st + dr) / 2;
if(verif(med) == 1)
{
last = med;
st = med + 1;
}
else
dr = med - 1;
}
return last;
}
int main()
{
freopen("subsecvente2.in" , "r" , stdin);
freopen("subsecvente2.out" , "w" , stdout);
int n , i , lmin;
string s;
scanf("%d\n" , &n);
lmin = LMAX;
for(i = 1 ; i <= n ; i ++)
{
getline(cin , s);
v.push_back(s);
lmin = min(lmin , ((int)s.length()));
}
printf("%d\n" , bs(lmin));
return 0;
}