QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#458333#8834. Formal Fringucup-team1004#AC ✓669ms243688kbC++141.6kb2024-06-29 16:42:252024-06-29 16:42:26

Judging History

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

  • [2024-06-29 16:42:26]
  • 评测
  • 测评结果:AC
  • 用时:669ms
  • 内存:243688kb
  • [2024-06-29 16:42:25]
  • 提交

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;
}

Details

Tip: Click on the bar to expand more detailed information

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