Cod sursa(job #1401122)

Utilizator addy01adrian dumitrache addy01 Data 25 martie 2015 17:41:19
Problema Substr Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <string>
#include <tr1/unordered_map>
using namespace std;

ifstream in("substr.in");
ofstream out("substr.out");
const int maxn = 16384 + 10;
int N,K,sol;
char s[maxn];
tr1 :: unordered_map < string , int > Q;

//caut binar lungimea sirului care apare de K ori si are lungime mid
void bsearch(int st,int dr){
    bool ok;
    while(st<dr){

    int mid = (st+dr)>>1;
    int i,j;
    string str;

    for(i=1;i<=N-mid+1;i++)
        {
            for(j=i;j<=i+mid;j++)
                str+=s[j];
            Q[str]++;
            str.erase(0,mid+1);
        }

    tr1 :: unordered_map < string , int > :: iterator it;
    ok=0;
    for(it=Q.begin();it!=Q.end();it++)
        if( (it->second) == K)
            {
                if(sol<(it->first).size())
                    sol=(it->first).size();
                st=mid+1;
                ok=1;
            }

    if(!ok)
        dr=mid-1;
    }
}

int main()
{
    in>>N>>K;
    int i;
    for(i=1;i<=N;i++)
        in>>s[i];

    bsearch(1,N);

    out<<sol<<" ";

    return 0;
}