wa十分,求助

P1659 [国家集训队] 拉拉队排练

只能帮你到这了。。。 弄了一个上午,终于a了 ···cpp ```cpp #include<cstdio> #include<algorithm> using namespace std; const int mod=19930726; char s[1000010],now[2000010]; long long n,t,R,pos,ans=1,k,p[2000010],cnt[1000010]; long long quick_pow(int x,int n){ long long ans=1,t=x; if(x==1)return 1; while(n){ if(n&1) ans=(ans*t)%mod; t=(t*t)%mod; n>>=1; } return ans; ``` }//你的 quick\_pow不能这么写 ```cpp int main(){ scanf("%lld%lld%s",&n,&k,s+1); t=n;//不能直接用n,输出时要用 for(int i=1;i<=t;i++){ now[2*i-1]='#'; now[2*i]=s[i]; } //now[0]='$';不能有这句 now[t=2*t+1]='#';//初始化会更方便 for(int i=1;i<=t;i++){ p[i]=i<R?min(p[(pos<<1)-i],R-i):1; while(p[i]+i<=t&&i-p[i]>=1&&now[i+p[i]]==now[i-p[i]])//在这加头尾判断 p[i]++; if(i+p[i]>R){ pos=i; R=i+p[i]; } if((p[i]-1)%2) cnt[p[i]-1]++;//这里改一下 } long long sum=0; for(int i=n;i>=1;i--){//用倒序替代优先队列 if(i%2==0) continue; sum+=cnt[i]; if(k>=sum){ ans=(ans*quick_pow(i,sum))%mod; k-=sum; } else{ ans=(ans*quick_pow(i,k))%mod; k-=sum; break; } } k>0?puts("-1"):printf("%lld",ans); return 0; } ··· ```
by 小兔宝宝 @ 2018-01-24 11:15:36


orz
by ezoiHQM @ 2018-01-24 12:16:25


@[小兔宝宝](/space/show?uid=84556) orz!灰名巨佬!比我强100倍的大佬!
by _Aehnuwx @ 2018-01-24 13:11:31


...
by 小兔宝宝 @ 2018-01-24 13:20:35


|