ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#203669 | #3566. T1 | nullptr_qwq | 100 | 154ms | 2736kb | C++11 | 1.7kb | 2024-03-06 15:53:03 | 2024-03-06 15:53:04 |
answer
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define fi first
#define se second
#define inf 1e9
#define pii pair<int,int>
#define F(i,a,b) for(int i=a;i<=(b);i++)
#define dF(i,a,b) for(int i=a;i>=(b);i--)
#define wh(lzm) while(lzm--)
#define lowbit(x) (x&(-x))
#define HH printf("\n")
#define eb emplace_back
using namespace std;
int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=(x<<3)+(x<<1)+(c^48),c=getchar();
return x*f;
}
const int mod=998244353,maxn=1100005;
int qpow(int x,int y){
int rt=1;
for(;y;y>>=1,x=1ll*x*x%mod) if(y&1) rt=1ll*rt*x%mod;
return rt;
}
void inc(int &x,int y){ x=(x+y>=mod)?(x+y-mod):(x+y); }
void dec(int &x,int y){ x=(x>=y)?(x-y):(x+mod-y); }
void mul(int &x,int y){ x=1ll*x*y%mod; }
int add(int x,int y){ return (x+y>=mod)?(x+y-mod):(x+y); }
int sub(int x,int y){ return (x>=y)?(x-y):(x+mod-y); }
int prod(int x,int y){ return 1ll*x*y%mod; }
void chkmax(int &x,int y){ x=max(x,y); }
void chkmin(int &x,int y){ x=min(x,y); }
int n,m,a[maxn],f[maxn][2],pre[maxn];
signed main(){
n=read();
F(i,1,n) a[i]=read();
int ans=0;
dF(i,30,0){
int S=(1<<i)-1,fl=0;
pre[0]=1,f[n+1][1]=0,f[n+1][0]=1;
F(j,1,n){
pre[j]=(a[j]&S)+1;
if(a[j]&(1<<i)) {
f[j][0]=S+1;
f[j][1]=(a[j]&S)+1;
}
else{
f[j][0]=(a[j]&S)+1;
f[j][1]=0;
}
}
F(j,1,n) mul(pre[j],pre[j-1]);
dF(j,n-1,1) {
int x=f[j][0],y=f[j][1];
f[j][0]=add(1ll*x*f[j+1][0]%mod,1ll*y*f[j+1][1]%mod);
f[j][1]=add(1ll*y*f[j+1][0]%mod,1ll*x*f[j+1][1]%mod);
}
F(j,1,n) if(a[j]&(1<<i)) inc(ans,1ll*pre[j-1]*f[j+1][fl]%mod),fl^=1;
if(fl) break;
if(!i) inc(ans,1);
}
cout<<ans;
}
详细
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 1172kb
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: 54ms
memory: 2736kb
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: 50ms
memory: 2736kb
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: 0ms
memory: 2732kb
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: 4ms
memory: 2732kb
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: 10ms
memory: 2736kb
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: 1ms
memory: 1204kb
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: 20ms
memory: 2736kb
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: 15ms
memory: 2732kb
input:
100000 334373908 573410989 584461609 757523993 595819683 93095595 866600961 552146722 657326632 1804...
output:
633437866
result:
ok 1 number(s): "633437866"