QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#458333 | #8834. Formal Fring | ucup-team1004# | AC ✓ | 669ms | 243688kb | C++14 | 1.6kb | 2024-06-29 16:42:25 | 2024-06-29 16:42:26 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
#define all(a) (a).begin(),(a).end()
#ifdef DEBUG
template<class T>
ostream& operator << (ostream &out,vector<T> a){
out<<'[';
for(T x:a)out<<x<<',';
return out<<']';
}
template<class T>
vector<T> ary(T *a,int l,int r){
return vector<T>{a+l,a+1+r};
}
template<class T>
void debug(T x){
cerr<<x<<endl;
}
template<class T,class...S>
void debug(T x,S...y){
cerr<<x<<' ',debug(y...);
}
#else
#define debug(...) void()
#endif
const int N=1e6+10,mod=998244353;
int n,f[21][N],g[21][N],h[21][N],ans[N];
int main(){
cin>>n;
f[20][0]=1;
for(int k=19;k>=0;k--){
copy(f[k+1],f[k+1]+1+n,f[k]);
for(int i=(1<<k);i<=n;i++){
(f[k][i]+=f[k][i-(1<<k)])%=mod;
}
}
g[20][0]=1;
for(int k=19;k>=0;k--){
copy(g[k+1],g[k+1]+1+n,g[k]);
for(int i=0;i<=n;i++){
if(i>=(1<<k+1))(g[k][i]+=g[k][i-(1<<k+1)])%=mod;
for(int j=k+1;j<=19&&i>=(1<<j+1);j++){
g[k][i]=(g[k][i]+1ll*g[j][i-(1<<j+1)]*(f[k][1<<j]-f[k+1][1<<j]+mod))%mod;
}
}
}
fill(h[0],h[0]+1+n,1);
for(int k=1;k<=19;k++){
copy(h[k-1],h[k-1]+1+n,h[k]);
for(int i=(1<<k);i<=n;i++){
(h[k][i]+=h[k][i-(1<<k)])%=mod;
}
}
for(int i=1;i<=n;i++){
int k=__lg(i);
if(i==(1<<k+1)-1){
ans[i]=f[0][i];
}else if(i<(1<<k)+(1<<k-1)){
ans[i]=f[0][i-(1<<k)];
}else{
int sum=(1<<k+1)-i;
for(int j=__lg(sum-1)+1;(1<<j)<=i;j++){
ans[i]=(ans[i]+1ll*h[j][(i-(1<<j))%(1<<j+1)]*g[j][(i-(1<<j))>>j+1<<j+1])%mod;
}
}
}
for(int i=1;i<=n;i++)printf("%d%c",ans[i],"\n "[i<n]);
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 92000kb
input:
10
output:
1 1 2 1 1 3 6 1 1 2
result:
ok 10 numbers
Test #2:
score: 0
Accepted
time: 0ms
memory: 89964kb
input:
70
output:
1 1 2 1 1 3 6 1 1 2 2 5 5 11 26 1 1 2 2 4 4 6 6 11 11 16 16 27 27 53 166 1 1 2 2 4 4 6 6 10 10 14 14 20 20 26 26 37 37 48 48 64 64 80 80 107 107 134 134 187 187 353 1626 1 1 2 2 4 4 6
result:
ok 70 numbers
Test #3:
score: 0
Accepted
time: 669ms
memory: 243688kb
input:
1000000
output:
1 1 2 1 1 3 6 1 1 2 2 5 5 11 26 1 1 2 2 4 4 6 6 11 11 16 16 27 27 53 166 1 1 2 2 4 4 6 6 10 10 14 14 20 20 26 26 37 37 48 48 64 64 80 80 107 107 134 134 187 187 353 1626 1 1 2 2 4 4 6 6 10 10 14 14 20 20 26 26 36 36 46 46 60 60 74 74 94 94 114 114 140 140 166 166 203 203 240 240 288 288 336 336 400 ...
result:
ok 1000000 numbers
Extra Test:
score: 0
Extra Test Passed