QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#767318#8834. Formal FringZauneseAC ✓72ms5668kbC++141.1kb2024-11-20 20:32:392024-11-20 20:32:40

Judging History

你现在查看的是最新测评结果

  • [2024-11-20 20:32:40]
  • 评测
  • 测评结果:AC
  • 用时:72ms
  • 内存:5668kb
  • [2024-11-20 20:32:39]
  • 提交

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