QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#767318 | #8834. Formal Fring | Zaunese | AC ✓ | 72ms | 5668kb | C++14 | 1.1kb | 2024-11-20 20:32:39 | 2024-11-20 20:32:40 |
Judging History
answer
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<tuple>
#define fi first
#define se second
#define mkp std::make_pair
using llu=long long unsigned;
using ll=long long;
using std::max;
using std::min;
template<class T> void cmax(T&a,T b){a=max(a,b);}
template<class T> void cmin(T&a,T b){a=min(a,b);}
const ll mod=998244353;
const int NV=1e6;
namespace xm{
int f[NV+5],g[NV+5];
void _(){
int N;
scanf("%d",&N);
f[0]=1;
for(int k=1;k<=N;k<<=1)
for(int i=k;i<=N;++i) f[i]=(f[i]+f[i-k])%mod;
for(int i=1;i<20;++i){
g[i]=f[(1<<i)-1];
for(int j=1;j<i;++j) g[i]=(g[i]-(ll)g[j]*f[(1<<i-j)-1])%mod;
}
for(int i=1;i<=N;++i) {
ll ans=0;
int k=std::__lg(i);
for(int j=k;~j;--j)
if(i>>j&1){
ans=(ans+(ll)g[k-j+1]*f[i&(1<<j)-1])%mod;
}else break;
printf("%lld ",(ans+mod)%mod);
}
puts("");
}
}
int main(){
xm::_();
return 0;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 3632kb
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: 3672kb
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: 72ms
memory: 5668kb
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