20分代码求调,谢谢!!!
查看原帖
20分代码求调,谢谢!!!
1058367
wang_shuang楼主2023/11/2 20:49
#include <cstdio>

char str[3000000];
int next[3000000];
int num[3000000];
int ans[3000000];

int main()
{
	int n; scanf("%d\n%s", &n, str + 1);
	for (int i = n - 1; i; i--)
	{
		if (str[i] == str[i + 1]) 
		{
			num[i] = num[i + 2] + 1;
			next[i] = i + 1;
			if (next[i + 2]) next[i] = next[i + 2];
		}
		else
		{
			if (next[i + 1] && str[next[i + 1] + 1] == str[i])
			{
				next[i] = next[i + 1] + 1;
				num[i] = 1;
				if (next[next[i] + 1]) 
				{
					num[i] += num[next[i] + 1];
					next[i] = next[next[i] + 1];
				}
			}
		}
		ans[i] = num[i] + ans[i + 1];
	}
//	for (int i = 0; i < n; i++) printf("%d ", next[i + 1]); printf("\n");
//	for (int i = 0; i < n; i++) printf("%d ", num[i + 1]); printf("\n");
	printf("%d", ans[1]);
	return 0;
}
2023/11/2 20:49
加载中...