WA30,不理解题意
查看原帖
WA30,不理解题意
635829
D_FANG楼主2024/8/13 11:37
#include<bits/stdc++.h>
using namespace std;
int n;
long long max(long long a,long long b){
	return a>b?a:b;
}
const int maxn=2e6+1e5;
char s[maxn];
long long nex[maxn];
long long ans;
int main(){
	scanf("%d",&n);
	scanf("%s",s);
	int j=0;
	for (int i=1;i<n;i++){
		j=nex[i-1];
		while (j>0&&s[i]!=s[j]) j=nex[j-1];
		if (s[i]==s[j]) ++j;
		nex[i]=j; 
	}
	for (long long i=0;i<n;i++){
		if (s[i]==s[0]){
			ans=ans+i;
//			printf("#%d ans=%d\n",i,ans);
			continue;
		}
		if (2*nex[i]>=i+1){
			if (nex[i]==i){
				ans=ans+i;
			}
			else{
				ans=ans+1ll*max(i+1-nex[i],nex[i]);
			}
		}
//		printf("#%d ans=%d\n",i,ans);
	}
	printf("%lld",ans);
	return 0;
}

没过第三个点:

输入: 10 bbcabbabbc

我的输出:25 正解:32

问是我理解题意错了吗?怎么我手推这个样例都觉得答案是25,求大佬教我语文(%%%

2024/8/13 11:37
加载中...