刚刚比赛的T10-亘久不变
  • 板块学术版
  • 楼主HY_BQ
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/6/23 17:21
  • 上次更新2023/11/3 13:15:49
查看原帖
刚刚比赛的T10-亘久不变
883787
HY_BQ楼主2023/6/23 17:21

请问我的代码为什么全部TLE了呢,显示TLE一定是超时的问题吗?刚用洛谷不太明白 /kel

#include<bits/stdc++.h>
#define N 1000010
#define ll long long
using namespace std;
int n,ans[N],q,t=1e6,nw;
ll x,y,mod,a[N],pre[N],res,o,ned,sha[N],mi[N];
struct node{
    ll k;
    int num;
}e[N];
bool cmp(node ww,node gg){
    return ww.k<gg.k;
}
ll ksm(ll x,ll P){
    ll res=1ll;
    for(;P;P>>=1,x=x*x%mod)
        if(P&1) res=res*x%mod;
    return res;
}
int main()
{
    scanf("%d%lld%lld%lld",&n,&x,&y,&mod);
    pre[0]=1ll;
    for(int i=1;i<=t;i++) pre[i]=(pre[i-1]*x%mod+1ll)%mod;
    for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
    scanf("%d",&q);
    for(int i=1;i<=q;i++){
        scanf("%lld",&e[i].k);
        e[i].num=i;
    }
    sort(e+1,e+1+q,cmp);
    ned=ksm(x,t);
    for(int i=1;i<=q;i++){
        while(e[i].k-1-nw>=t){
            nw+=t;
            res=(res*ned%mod+pre[t]*y%mod)%mod;
        }
        res=(res*ksm(x,e[i].k-nw)%mod+pre[e[i].k-1-nw]*y%mod)%mod;
        nw=e[i].k;
        sha[i]=res;
        mi[i]=ksm(x,e[i].k);
    }
    for(int i=1;i<=n;i++){
        if(a[i]>=mod) continue;
        for(int j=1;j<=q;j++)
            if((sha[j]+mi[j]*a[i]%mod)%mod==a[i])
                ans[e[j].num]++;
    }
    for(int i=1;i<=q;i++) printf("%d\n",ans[i]);
    return 0;
}
2023/6/23 17:21
加载中...