Pagini recente » Cod sursa (job #2035897) | Statistici Delia Dumitrescu (ddeliaioana) | Monitorul de evaluare | Cod sursa (job #2040226) | Cod sursa (job #1884876)
#include <fstream>
#include <cstring>
#include <unordered_map>
#define DIM 20000
using namespace std;
const long long MOD = 1e9 + 7;
const long long BASE = 30;
ifstream f ("substr.in");
ofstream g ("substr.out");
long long n, k, pw[DIM], h[DIM];
char s[DIM];
void prec () {
pw[0] = 1;
for (int i = 1; i <= n; ++i) {
pw[i] = (pw[i - 1] * BASE) % MOD;
}
for (int i = 1; i <= n; ++i) {
h[i] = (h[i - 1] * BASE + (s[i] - 'a')) % MOD;
}
}
bool verif (int lg) {
unordered_map <long long, int> mp;
mp[h[lg]] = 1;
for (int i = lg + 1; i <= n; ++i) {
long long qw = (h[i] - (h[i - lg] * pw[lg]) % MOD + MOD) % MOD;
++mp[qw];
if (mp[qw] >= k)
return 1;
}
return 0;
}
int cbin () {
int i, p = 0;
prec ();
for (i = 1; i <= n; i <<= 1);
while (i) {
if (i + p <= n && verif (i + p) == 1) {
p += i;
}
i >>= 1;
}
return p;
}
int main() {
f >> n >> k >> (s + 1);
g << cbin ();
return 0;
}