WA test#9 求调
查看原帖
WA test#9 求调
513900
Wilson_Lee楼主2022/11/15 07:33

简单等比数列求和题,在牛客上交是96分,CF一直挂第9个点。

#include<bits/stdc++.h>
using namespace std;

#define inv(x) quick_pow(x,MOD-2)
typedef long long ll;
const int MAXN=1e5+5;
const int MOD=1e9+9;
char s[MAXN];
int quick_pow(int a,int b)
{
    int ret=1;
    while(b)
    {
        if(b&1) ret=(ll)ret*a%MOD;
        a=(ll)a*a%MOD,b>>=1;
    }
    return ret;
}
int main()
{
    int n,a,b,k;
    cin>>n>>a>>b>>k;
    scanf("%s",s);
    int num=0,tmp=(int)((ll)b*inv(a)%MOD);
    for(int i=0;i<k;++i)
    {
        if(s[i]=='-') num=(num-quick_pow(tmp,i)+MOD)%MOD;
        else num=(num+quick_pow(tmp,i))%MOD;
    }
    num=(ll)num*quick_pow(a,n)%MOD;
    tmp=quick_pow(tmp,k);
    int ans;
    if(num==1) ans=(ll)(n+1)/k*num%MOD;
    else ans=(ll)num*(1-quick_pow(tmp,(n+1)/k)+MOD)%MOD*inv(1-tmp+MOD)%MOD;
    cout<<ans;
    return 0;
}
2022/11/15 07:33
加载中...