UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#203547#3566. T1wosile100102ms2096kbC++11924b2024-02-27 11:37:542024-02-27 13:03:40

answer

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod 998244353
int n;
int a[100005],b[100005],f[100005][2];
int solve(int d){
	if(!d)return 1;
	int base=1,pos=0;
	for(int i=1;i<=n;i++){
		if(d&a[i]){
			a[i]-=d;
			b[++pos]=a[i];
		}
		else base=(ll)base*(a[i]+1)%mod;
	}
	f[pos+1][0]=1,f[pos+1][1]=0;
	// for(int i=1;i<=pos;i++)printf("%d ",b[i]);
	// printf("\n");
	for(int i=pos;i>=1;i--){
		f[i][0]=((ll)f[i+1][0]*d+(ll)f[i+1][1]*(b[i]+1))%mod;
		f[i][1]=((ll)f[i+1][1]*d+(ll)f[i+1][0]*(b[i]+1))%mod;
	}
	int ans=0;
	for(int i=1;i<=pos;i++){
		// 0~i-1 1
		// i 0
		ans=(ans+(ll)f[i+1][1^i&1]*base)%mod;
		base=(ll)base*(b[i]+1)%mod;
	}
	// printf("d=%d ans=%d\n",d,ans);
	return (ans+(pos%2==0?solve(d>>1):0))%mod;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	printf("%d",solve(1<<30));
	return 0;
}
// quod erat demonstrandum

详细

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 10
Accepted

Test #1:

score: 10
Accepted
time: 0ms
memory: 1200kb

input:

10
3 5 0 1 0 3 5 4 2 5

output:

13248

result:

ok 1 number(s): "13248"

Subtask #2:

score: 10
Accepted

Test #2:

score: 10
Accepted
time: 22ms
memory: 2020kb

input:

100000
25 0 7 1 42 27 29 17 26 23 11 4 24 40 31 10 6 16 26 26 46 27 7 32 9 33 17 15 4 44 36 29 19 17...

output:

460821675

result:

ok 1 number(s): "460821675"

Subtask #3:

score: 10
Accepted

Test #3:

score: 10
Accepted
time: 22ms
memory: 2020kb

input:

100000
14 25 9 27 9 33 48 28 10 29 28 39 50 33 8 18 38 0 34 25 13 7 30 48 13 39 14 11 40 8 32 3 7 16...

output:

885189946

result:

ok 1 number(s): "885189946"

Subtask #4:

score: 10
Accepted

Test #4:

score: 10
Accepted
time: 12ms
memory: 1584kb

input:

100000
999998102 402961903 309346107 445160702 274308544 145846539 341002420 77841978 313436667 3206...

output:

714756233

result:

ok 1 number(s): "714756233"

Subtask #5:

score: 10
Accepted

Test #5:

score: 10
Accepted
time: 13ms
memory: 1580kb

input:

100000
999998479 400795186 127605328 439009686 279338791 222344190 32214702 347490239 390113609 1737...

output:

885251777

result:

ok 1 number(s): "885251777"

Subtask #6:

score: 10
Accepted

Test #6:

score: 10
Accepted
time: 8ms
memory: 1584kb

input:

100000
999980995 341927799 474797020 355936070 215296904 77682610 413850993 194378088 233473841 3566...

output:

99729538

result:

ok 1 number(s): "99729538"

Subtask #7:

score: 10
Accepted

Test #7:

score: 10
Accepted
time: 0ms
memory: 1208kb

input:

2000
540706819 309629779 17707890 194083691 334726587 456162964 498417390 246765617 957682339 604730...

output:

800177499

result:

ok 1 number(s): "800177499"

Subtask #8:

score: 10
Accepted

Test #8:

score: 10
Accepted
time: 0ms
memory: 1208kb

input:

2000
101722906 988313572 550840902 777765553 778991206 95817204 989809443 357040014 425595004 794587...

output:

443206431

result:

ok 1 number(s): "443206431"

Subtask #9:

score: 10
Accepted

Test #9:

score: 10
Accepted
time: 14ms
memory: 2096kb

input:

100000
327468559 836395032 98737045 14714567 147268924 355455125 829199457 117664948 79547712 117935...

output:

252529800

result:

ok 1 number(s): "252529800"

Subtask #10:

score: 10
Accepted

Test #10:

score: 10
Accepted
time: 11ms
memory: 2096kb

input:

100000
334373908 573410989 584461609 757523993 595819683 93095595 866600961 552146722 657326632 1804...

output:

633437866

result:

ok 1 number(s): "633437866"