Cod sursa(job #3145227)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 14 august 2023 10:44:37
Problema Substr Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <bits/stdc++.h>
#include <cstring>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define forq(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
#define mod 1000000297ll
using namespace std;
typedef long long ll;
ifstream in("substr.in");
ofstream out("substr.out");
ll n,e,f,o,i,j,k,q,p,r;char s[16385];unordered_map<ll,ll>a;
int main()
{
in>>n>>q>>s,f=n;
if(q==1)out<<n,exit(0);
while(e!=f)
{
    o=(e+f+1)/2,p=0,r=1;
    for(i=1;i<o;i++)r=r*128%mod;
    for(i=0;i<o;i++)p=(p*128+s[i])%mod;
    ++a[p];//,cout<<i<<' '<<o<<' '<<r<<' '<<r*s[i-o]<<'\n'<<p<<'
    while(i<n)
    {
        p=((p-r*s[i-o])*128+s[i]+(mod<<14))%mod,i++;
        if(++a[p]>=q){i=-3;break;}
        //cout<<p<<' ';
    }
    a.clear();
    if(i<0)
        e=o;
        else f=o-1;
}
out<<e;
}