75分的看过来 - 警示后人
查看原帖
75分的看过来 - 警示后人
231022
1234567890regis楼主2024/9/29 20:25

WA 75pts:

#include <iostream>
#include <vector>
#include <string>
#define err '~'
#define int long long
using namespace std;

const int MAXN = 10e6 + 7;
char a[MAXN];
int dp[MAXN], can[MAXN], cnt;

void go_work(string inp)
{
	int n = inp.size();
	a[0] = err;
	for (int i = 1; i <= n; i++) a[i] = inp[i - 1];
	// a[n + 1] = '#';
	for (int i = 1, mid = 0, maxr = 0; i <= n; i++)
	{
		if (i <= maxr) dp[cnt + i] = min(dp[cnt + 2 * mid - i], maxr - i + 1);
		while (a[i - dp[cnt + i]] == a[i + dp[cnt + i]]) dp[cnt + i]++;
		if (i + dp[cnt + i] - 1 >= maxr) maxr = i + dp[cnt + i] - 1, mid = i;
	}
	can[n] = true;
	for (int i = n; i >= 1; i--)
	{
		if (i + dp[cnt + i] - 1 == n) can[cnt + i] = true;
		else if (i == dp[cnt + i]) can[cnt + i] = can[cnt + i + dp[cnt + i] - 1];
		else can[cnt + i] = false;
	}
	for (int i = 1; i <= n; i++) if (can[cnt + i]) cout << i << ' ';
	cout << endl;
	cnt += 2 * n;
}

signed main()
{
	int t;
	cin >> t;
	while (t--)
	{
		string inp; cin >> inp;
		go_work(inp);
	}
}

AC 100pts:

#include <iostream>
#include <vector>
#include <string>
#define err '~'
#define int long long
using namespace std;

const int MAXN = 10e6 + 7;
char a[MAXN];
int dp[MAXN], can[MAXN], cnt;

void go_work(string inp)
{
	int n = inp.size();
	a[0] = err;
	for (int i = 1; i <= n; i++) a[i] = inp[i - 1];
	a[n + 1] = '#';
	for (int i = 1, mid = 0, maxr = 0; i <= n; i++)
	{
		if (i <= maxr) dp[cnt + i] = min(dp[cnt + 2 * mid - i], maxr - i + 1);
		while (a[i - dp[cnt + i]] == a[i + dp[cnt + i]]) dp[cnt + i]++;
		if (i + dp[cnt + i] - 1 >= maxr) maxr = i + dp[cnt + i] - 1, mid = i;
	}
	can[n] = true;
	for (int i = n; i >= 1; i--)
	{
		if (i + dp[cnt + i] - 1 == n) can[cnt + i] = true;
		else if (i == dp[cnt + i]) can[cnt + i] = can[cnt + i + dp[cnt + i] - 1];
		else can[cnt + i] = false;
	}
	for (int i = 1; i <= n; i++) if (can[cnt + i]) cout << i << ' ';
	cout << endl;
	cnt += 2 * n;
}

signed main()
{
	int t;
	cin >> t;
	while (t--)
	{
		string inp; cin >> inp;
		go_work(inp);
	}
}
2024/9/29 20:25
加载中...