程序厌氧求助!!!
查看原帖
程序厌氧求助!!!
1049051
JiuZhE66666楼主2024/7/22 15:39

rt,最后一个点输出-1,我本地跑也是-1,但是交上去就错了

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll mod=19930726;
ll p[1000005]={0};

ll num[10000005]={0};

ll qpow(ll a,ll n)
{
    ll res=1;
    while(n)
    {
        if(n&1) res=res*a%mod;
        a=a*a%mod;
        n>>=1LL;
    }
    return res;
}


void solve()
{
    ll n,k;
    cin>>n>>k;

    string s;
    cin>>s;

    ll center=0;
    ll rmax=1;

    for(ll i=1;s[i];i++)
    {
        if(i<rmax) p[i]=min(rmax-i,p[2*center-i]);

        while(i-p[i]>=0 && s[i+p[i]]==s[i-p[i]]) p[i]++;

        if(p[i]+i>rmax)
        {
            center=i;
            rmax=p[i]+i;
        }
        num[2*p[i]-1]++;
        num[2*p[i]-1]%=mod;
    }

    ll tem=0;
    ll ans=1;
    for(ll i=1000000;i>=1;i--)
    {
        if(tem+num[i]<=k)
        {
            ans=ans*qpow(i,num[i])%mod;
            tem+=num[i];
            if(tem==k) break;
        }
        else
        {
            ans=ans*qpow(i,k-tem)%mod;
            tem=k;
            break;
        }
        num[i-2]+=num[i];
        num[i-2]%=mod;
    }

    if(tem<k) cout<<-1;
    else cout<<ans;
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}


2024/7/22 15:39
加载中...