QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#398743 | #3766. 抄板子 | xlwang | AC ✓ | 126ms | 7768kb | C++14 | 2.4kb | 2024-04-25 17:32:13 | 2024-04-25 17:32:14 |
Judging History
answer
#include<bits/stdc++.h>
#define fr(i,j,k) for(register int i=j;i<=k;++i)
#define rf(i,j,k) for(register int i=j;i>=k;--i)
#define foredge(i,j) for(register int i=head[j];i;i=e[i].nxt)
#define pb push_back
#define Times printf("Time:%.3lf\n",clock()/CLOCKS_PER_SEC)
using namespace std;
inline int read(){
int x=0;
bool f=0;
char c=getchar();
while(!isdigit(c)) f|=(c=='-'),c=getchar();
while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=getchar();
return f?-x:x;
}
inline void write(int x){
if(x<0){putchar('-');x=-x;}
if(x>9)write(x/10);
putchar(x%10+'0');
}
inline void writeln(int x){write(x); puts("");}
inline void writepl(int x){write(x); putchar(' ');}
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
inline int randfind(int l,int r){return rnd()%(r-l+1)+l;}
//inline void init(){
// int t=read();
// while(t--) work();
//}
int n,w;
int mod;
inline int ksm(int x,int y=mod-2){
int sum=1;
while(y){
if(y&1) sum=1ll*sum*x%mod;
y=y/2;x=1ll*x*x%mod;
}
return sum;
}
inline void add(int &x,int y){x+=y;if(x>=mod) x-=mod;}
inline vector<int> ntt(vector<int> x,int w,int n){
if(n==3){
vector<int> now;
int id=1;
fr(i,0,n-1){
int wn=1;
int ans=0;
fr(k,0,n-1){
add(ans,1ll*wn*x[k]%mod);
wn=1ll*wn*id%mod;
}
id=1ll*id*w%mod;
now.push_back(ans);
}
return now;
}
vector<int> a1,a2;
fr(i,0,n-1){
if(i%2==0) a1.push_back(x[i]);
else a2.push_back(x[i]);
}
a1=ntt(a1,1ll*w*w%mod,n/2);a2=ntt(a2,1ll*w*w%mod,n/2);
vector<int> Ans;Ans.resize(n);
int res=ksm(w,n/2),id=1;
fr(i,0,n/2-1){
add(Ans[i],1ll*id*a2[i]%mod);add(Ans[i],a1[i]%mod);
add(Ans[i+n/2],1ll*id*a2[i]%mod*res%mod);add(Ans[i+n/2],a1[i]%mod);
id=1ll*id*w%mod;
}
return Ans;
}
inline void work(){
mod=read();w=read();
vector<int> vc;
fr(i,1,n){
int x;x=read();
vc.push_back(x);
}
vc=ntt(vc,w,n);
for(auto x:vc) writepl(x);puts("");
}
inline void init(){
while(cin>>n) work();
}
signed main(){
//freopen("input.in","r",stdin);
//freopen("output.out","w",stdout);
init();
// printf("\nTIME:%.3lf",(double)clock()/CLOCKS_PER_SEC);
return 0;
}
詳細信息
Test #1:
score: 100
Accepted
time: 126ms
memory: 7768kb
input:
3 7 1 1 2 3 3 7 2 1 2 3 6 458719 458718 91633 324072 357282 141401 443440 75350 768 514561 485375 306042 35097 10695 128492 291101 378867 192572 303052 4068 342913 491848 360207 96443 437578 343659 122388 452505 438388 28080 437341 145852 489939 126800 414663 240274 110690 274192 14591 129395 250161...
output:
6 6 6 6 3 1 57021 351532 57021 351532 57021 351532 214897 213991 103216 146406 395817 287610 302603 231730 269555 118458 242202 387998 172699 431431 363434 474119 453099 473997 342030 171160 491310 193812 432928 132545 294019 203809 179721 482448 311968 475195 210406 140340 198951 194087 497153 1...
result:
ok 120 lines