建议升黄
查看原帖
建议升黄
951886
niumachaoren楼主2024/7/26 09:44

虽然公式好推,但是毕竟涉及到进制不太好思考,而且前缀和维护的时候小细节很多要不然会wa最后一个点,比如sum数组要多算到大于n的地方,特判求和等于0等等的情况,还是比较繁琐的,可以升一下黄吧

AC代码

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=5e5+10,mod=20070720;
ll n,k,a[maxn*2],sum[maxn*2],ans1[1000001],p[100001];
void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++)cin>>a[i];
    sum[0]=0;
    p[0]=1;
    for(int i=1;i<=n*2;i++){
        p[i]=p[i-1]*k%mod;
        sum[i]=(sum[i-1]%mod+p[i-1])%mod;
    }
    ll ans=0;
    for(int i=1;i<=n;i++){
    	ll s=(sum[n-i+1]%mod*a[i]%mod*i%mod)%mod;
    	ans=(ans+s)%mod;
	}
	ll cnt=0;
    if(ans==0){
        cout<<0<<endl;
        return;
    }
	while(ans){
		ans1[++cnt]=ans%k;
		ans/=k;
	}
	for(int i=cnt;i>=1;i--)cout<<ans1[i]<<" ";
	cout<<"\n";
}
int main(){
    int T;
    cin>>T;
    while(T--)solve();
}
2024/7/26 09:44
加载中...