提交时间:2025-06-08 14:49:38
运行 ID: 37984
#include<bits/stdc++.h> #include<bits/extc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; using namespace __gnu_pbds; typedef long long ll; const ll mod=(ll)(1e18)+3; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } int n,k; inline ll add(ll a,ll b){if((a+=b)>=mod)a-=mod;return a;} inline ll mul(ll a,ll b){return (__int128)a*(__int128)b%(__int128)mod;} ll qp(ll a,ll b){ ll res=1; while(b){ if(b&1)res=mul(res,a); a=mul(a,a);b>>=1; }return res; } struct gao { ll t[15][15],ans[15],iv[15]; gao(){memset(iv,-1,sizeof(iv));} void init(){memset(t,0,sizeof(t)),memset(ans,0,sizeof(ans));} void solve(int n){ int i=1; up(c,1,n){ int f=-1; up(j,i,n)if(t[j][c])f=j; if(f==-1)continue; up(k,1,n+1)swap(t[i][k],t[f][k]); if(iv[c]==-1)iv[c]=qp(t[i][c],mod-2); ll dd=iv[c]; up(j,i+1,n){ ll d=mul(t[j][c],dd); up(k,1,n+1)t[j][k]=add(t[j][k],mod-mul(t[i][k],d)); } i++; } down(i,n,1){ up(j,i+1,n)t[i][n+1]=add(t[i][n+1],mod-mul(t[i][j],ans[j])); if(t[i][i])ans[i]=mul(t[i][n+1],iv[i]); } } }T; bool chk(int x,int y){ up(i,0,k-1){ if(abs(x%k-y%k)>1)return 0; x/=k,y/=k; }return 1; } const int maxn=1e6+10; int ans[maxn]; int pw[70]; void slv(){ n=read(),k=read()+1; pw[0]=1;up(i,1,n)pw[i]=pw[i-1]*k; int v=qp(k,n); up(i,0,v-1)ans[i]=read(); up(i,0,n-1){ up(j,0,v-1)if((j/pw[i])%k==0){ T.init(); up(l,0,k-1){ up(t,-1,1)if(l+t>=0&&l+t<=k-1)T.t[l+1][l+t+1]=1; T.t[l+1][k+1]=ans[j+pw[i]*l]; } T.solve(k); up(l,0,k-1)ans[j+pw[i]*l]=T.ans[l+1]; } } up(i,0,v-1)printf("%d ",ans[i]); } int main(){ //freopen("tag.in","r",stdin),freopen("tag.out","w",stdout); slv(); return 0; }