求助 AT2040 WA在了第6个点
  • 板块学术版
  • 楼主AFOed
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/8/4 16:53
  • 上次更新2023/10/27 17:02:23
查看原帖
求助 AT2040 WA在了第6个点
314427
AFOed楼主2022/8/4 16:53

不知道为什么WA在了第六个点

我拿题解测了很多组数据都是对的

有没有什么hack数据\

求各位大佬帮帮蒟蒻

题目链接

#include<stdio.h>
#include<string.h>
#include<iostream>
#define N 500010
using namespace std;
char s[N];
long long Next[N],Index[N],Length[N],Mod[N];
long long n,cnt,ans,posa,posb,MaxM;
char lastc;
bool Flag,flag;
int main()
{
	scanf("%s",s+1);
	n= strlen(s+1);
	for(long long i=2;i<=n;++i)
	{
		if(s[i]!=s[i-1])
		{
			Flag=true;
			break;
		}
	}
	if(!Flag)
	{
		printf("%d\n1\n",n);
		return 0;
	}
	Next[1]=0;
	for(long long i=2,j=0;i<=n;++i)
	{
		while (j>0&&s[i]!=s[j+1])j=Next[j];
		if(s[i]==s[j+1])++j;
		Next[i]=j;
		//printf("%d %d\n",i,Next[i]);
		if((i%(i-Next[i]))==0)
		{
			Index[++cnt]=i;
			Length[cnt]=(i/(i-Next[i]));
			Mod[cnt]=i-Next[i];
		}
	}
	//printf("%d %d\n",Index[cnt],cnt);
	if(Index[cnt]!=n || (Index[cnt]==n && Length[cnt] <=1 ))
	{
		printf("1\n");
		printf("1\n");
		return 0;
	}
	lastc=s[1];
	posa=2;
	while(lastc==s[posa])posa++;
	lastc=s[n];
	posb=n-1;
	while(lastc==s[posb])posb--;
	//printf("%d %d %d %d\n",posa,posb,Mod[cnt],n-Mod[cnt]);
	for(int i=1;i<=n;++i)MaxM=max(MaxM,Mod[i]);
	for(int i=posa;i<posb;++i)
	{
		if(((i%MaxM)==0))continue;
		++ans;
	}
	if(MaxM==n-MaxM)ans++;
	printf("2\n");
	printf("%lld\n",ans+2);
}
/*lld\nlld\nlld\nlld\nlld\nlld\nlld\nlld\nlld\nlld\nlld\n*/
2022/8/4 16:53
加载中...