70 最后两个点tle求调,必关注帮助我的大佬
查看原帖
70 最后两个点tle求调,必关注帮助我的大佬
819682
Exile_Code楼主2023/11/6 21:30
#define  _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cstdlib>
#include <algorithm>
#include <list>
#include <string>
#include <cmath>
#include <bitset>
#include <stack>
#include <unordered_set>


#define ull				unsigned long long 
#define ll				long long
#define pii				pair<ll ,ll>
#define ft				first
#define sd				second
#define pr				pair
#define cy				cout<<"Yes"<<endl
#define cn				cout<<"No"<<endl
#define forn(i,n)		for(int (i)=0;(i)<(n);(i)++)   
#define forne(i,n)		for(int (i)=1;(i)<=(n);(i)++)
#define rforn(i,n)		for(int (i)=(n-1);(i)>=(0);(i)--)   
#define rforne(i,n)		for(int (i)=(n);(i)>=(1);(i)--)
#define sorta(a)		sort((a).begin(),(a).end())
#define sortcmp(a,cmp)	sort((a).begin(),(a).end(),cmp)
#define vv				vector


const int inf = 0x4f4f4f4f;
const int N = 2e5 + 5;
ll t;


void solve() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	string s, ss; cin >> s >> ss;
	vector<int>ne(ss.size());
	ne[0] = -1;
	for (int i = 1, j = -1; i < ss.size(); i++) {
		
		while (j != -1 && ss[i] != ss[j + 1])
			j = ne[j];
		if (ss[i] == ss[j + 1])
			j++;
		ne[i] = j;
	}
	vv<int>rs(10 * N); int cnt = 0;
	for (int i = 0, j = -1; i < s.size(); i++) {

		while (j != -1 && s[i] != ss[j + 1])
			j = ne[j];
		if (s[i] == ss[j + 1])
			j++;
		if (j == ss.size() - 1){
			rs[cnt++] = i - j;
			i -= (ne[j] + 1);
			j = -1;
		}
	}
	forn(i, cnt)
		cout << rs[i] + 1<< endl;
	for (auto a : ne)
		cout << a + 1<< " ";

}
int main() {

	//cin >> t;
	t = 1;
	while (t--)
		solve();

	return 0;
}




2023/11/6 21:30
加载中...