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;
}