昨晚的 G1 为什么被 hack 了?
  • 板块学术版
  • 楼主rainygame
  • 当前回复7
  • 已保存回复7
  • 发布时间2024/5/3 17:29
  • 上次更新2024/5/3 19:51:38
查看原帖
昨晚的 G1 为什么被 hack 了?
804607
rainygame楼主2024/5/3 17:29
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MAXN 200001

int t, n, k;
int N[MAXN];
string str;

bool check(int x){
    string t(str.substr(0, x)), s(str.substr(x));
    int p(0);
    vector<int> vec;
    for (int i(1); i<t.size(); ++i){
    	while (t[i] != t[p] && p) p = N[p];
    	if (t[i] == t[p]) N[i+1] = ++p;
	}
    p = 0;
    for (int i(0); i<s.size(); ++i){
    	while (s[i] != t[p] && p) p = N[p];
    	p += (s[i] == t[p]);
    	if (p == t.size()) vec.push_back(i-t.size()+1);
	}
    int maxn(INT_MIN), cnt(1);
    for (int i(0); i<vec.size(); ++i){
        if (vec[i] > maxn+x-1){
            ++cnt;
            maxn = vec[i];
        }
    }
    return cnt >= k;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    for (cin >> t; t; --t){
        cin >> n >> k >> k >> str;
        int l(0), r(n/k), mid;
        while (l < r){
            mid = (l+r+1)>>1;
            if (check(mid)) l = mid;
            else r = mid-1;
        }
        cout << l << '\n';
    }

    return 0;
}

2024/5/3 17:29
加载中...