求助关于s.size()输出不了
  • 板块学术版
  • 楼主newbie_QwQ
  • 当前回复10
  • 已保存回复10
  • 发布时间2022/8/25 21:07
  • 上次更新2023/10/27 13:40:29
查看原帖
求助关于s.size()输出不了
535491
newbie_QwQ楼主2022/8/25 21:07

rt.while循环里第2行n=s.size()之后就没有反应了

#include<bits/stdc++.h>
using namespace std;
int p[200005];
char c[200005];
struct node  
{
	int l,r;	
}a[1000005];
bool cmp(node a,node b)
{
	if(a.l==b.l) return a.r<b.r;
	else return a.l<b.l; 
}
int main()
{
	ios::sync_with_stdio(false);
    int t,i,j,k,n,m,id=0,mid=0,ans=0,ma;
    string s;
    cin>>t;
    while(t--)
    {
	    cin>>s;
	    n=s.size();
	    c[0]='+';
	    c[n*2+2]='-';
	    for(i=0;i<s.size();i++)
	    {
	    	c[2*i+1]='#';
	    	c[2*i+2]=s[i];
		}
		c[s.size()*2+1]='#';
		for(i=1;i<=s.size()*2+1;i++)
		{
			p[i]=1;
			if(mid>i) p[i]=min(mid-i,p[2*id-i]);
			while(c[i-p[i]]==c[i+p[i]]) 
			{
				p[i]++;
			}
			if(i+p[i]>mid)
			{
				mid=i+p[i];
				id=i;
			}
		}
		for(i=1;i<=2*n+1;i++)
		{
			if(i%2==0) a[i].l=(i/2)-((p[i]-1)/2),a[i].r=(i/2)+((p[i]-1)/2);
			else a[i].l=(i/2)-((p[i]-1)/2)+1,a[i].r=(i/2)+((p[i]-1)/2);
		}
		sort(a+1,a+2*n+1,cmp);
		j=1;
		k=1;
		ans=0;
		for(i=1;i<=2*n+1;i++) if(a[i].l==1) k=i;
		while(k<2*n+1)  
		{
			ans++;
			j=a[k].r;
			m=k;
			ma=0;
			for(i=m;i<=2*n+1;i++) 
			{
				if(a[i].l<=j) 
				{
					if(a[i].r>ma) ma=a[i].r,k=i;
				}
				if(a[i].l>j) break;
			}
		}
		cout<<ans<<endl;
	} 
	return 0;
}
2022/8/25 21:07
加载中...