Cod sursa(job #3239981)

Utilizator Luca529Taschina Luca Luca529 Data 10 august 2024 18:06:11
Problema Substr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("substr.in");
ofstream fout("substr.out");
long long int cod[300], baza=67, f[20005], MOD=1e9+7, has;
map<int, int> M;
char x[20005];
int n, k;

int OK(int v)
{M.clear();

 has=0;
 for(int i=1;i<=n;i++)
 {has=(has*baza+cod[int(x[i])])%MOD;

  if(i>=v)
  {M[has]++;
   if(M[has]>=k)return 1;

   has=has-(f[v-1]*cod[int(x[i-v+1])])%MOD;
   has+=MOD, has%=MOD;
  }
 }

 return 0;
}

int main()
{   f[0]=1;
    for(int i=1;i<=20000;i++)
    f[i]=(f[i-1]*baza)%MOD;

    int st, dr, mij, sol;
    fin>>n>>k;

    for(int i=1;i<=n;i++)
    fin>>x[i];

    for(int i=1;i<=9;i++)
    cod[int('0'+i)]=i;

    for(int i='A';i<='z';i++)
    cod[i]=i-'A'+10;

    st=1, dr=n, sol=0;
    while(st<=dr)
    {mij=(st+dr)/2;

     if(OK(mij))sol=mij, st=mij+1;
     else dr=mij-1;
    }
    fout<<sol;
    return 0;
}