Cod sursa(job #2539463)

Utilizator cyg_vladioanBirsan Vlad cyg_vladioan Data 5 februarie 2020 21:29:15
Problema Hashuri Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.48 kb
#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;
}