Pagini recente » Cod sursa (job #2738558) | Cod sursa (job #1326343) | Cod sursa (job #2939613) | Cod sursa (job #1725053) | Cod sursa (job #2097846)
#include <fstream>
#define DIM 17000
#define DIMH 797317
#define BAZA 1073
using namespace std;
long long H[DIMH];
long long st, dr, n, k, mid, pmax, cod;
char s[DIM];
int main () {
ifstream fin ("substr.in");
ofstream fout("substr.out");
fin>>n>>k;
fin>>s+1;
st = 1; dr = n - k + 1;
while (st <= dr) {
int mid = (st + dr)/2;
int ok = 0;
for (int i=0;i<DIMH;i++)
H[i] = 0;
pmax = 1;
for (int i=1;i<mid;i++) {
pmax = (pmax * BAZA) % DIMH;
}
cod = s[1] % DIMH;
for (int i=2;i<=mid;i++) {
cod = (cod * BAZA + s[i]) % DIMH;
}
H[cod]++;
for (int i=mid+1;i<=n;i++) {
cod -= pmax * (s[i-mid]) % DIMH;
if (cod < 0)
cod += DIMH;
cod = (cod * BAZA + s[i]) % DIMH;
H[cod]++;
if (H[cod] >= k) {
ok = 1;
break;
}
}
if (ok)
st = mid+1;
else
dr = mid-1;
}
fout<<dr;
return 0;
}