神秘64分代码,马蜂良好求条
查看原帖
神秘64分代码,马蜂良好求条
856488
XYstarabyss楼主2025/1/14 10:21

rt,求调或hack

#include <bits/stdc++.h>
using namespace std;
#define dbug(x) cout<<(#x)<<':'<<x<<' ';
#define ent cout<<endl;
#define f(n,m,i) for (int i = n;i <= m;i++)
#define fc(n,m,i) for (int i = n;i >= m;i--)
void C(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cerr.tie(0);
}
int nxt[1000001],len1,len2,pls[1000001],cnt = 0;
string s1,s2;
void getnext(){
    nxt[1] = 0;
    int k = 0;
    f(2,len2,i){
        while (k && s2[i] != s2[k + 1]){
            k = nxt[k];
        }
        if (s2[i] == s2[k + 1]){
            k ++;
        }
        nxt[i] = k;
    }
}
void kmp(){
	getnext();
    int j = 0;
	f(1,len1,i){
		while(j && s1[i] != s2[j + 1]){
			j = nxt[j];
		}
		if(s1[i] == s2[j + 1]){
            j++;
        }
		if(j == len2){
            pls[++cnt] = i - len2 + 1;
        }
	}
}
int main(){
    C();
	cin >> s1 >> s2;
    s1 = " " + s1;
    s2 = " " + s2;
    len1 = s1.length() - 1;
    len2 = s2.length() - 1;
    while (1){
        kmp();
        if (!cnt){
            break;
        }
        fc(cnt,1,i){
            s1.erase(pls[i],len2);
        }
        cnt = 0;
    }
    s1.erase(0,1);
    cout << s1;
	return 0;
}
/*
g++ cs.cpp -o cs
./cs

whatthemomooofun
moo

*/
2025/1/14 10:21
加载中...