ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#203541 | #3566. T1 | Anonyme | 100 | 146ms | 1644kb | C++11 | 1.4kb | 2024-02-27 10:05:05 | 2024-02-27 13:03:11 |
answer
#include <bits/stdc++.h>
using namespace std;
#define QwQ330AwA return 0
#define ll long long
const int mod = 998244353;
int n;
int a[100005];
int f[2][2], g[2][2];
int ksm(int a, int b) {
a %= mod;
int ans = 1;
for (; b; b >>= 1, a = 1ll * a * a % mod) {
if (b & 1) ans = 1ll * ans * a % mod;
}
return ans;
}
void add(int &x, int y) {
x += y;
if (x >= mod) x -= mod;
}
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n;
int sum = 0;
for (int i = 1; i <= n; i++) cin >> a[i], sum ^= a[i];
int ans = 0;
for (int p = 29; p >= 0; p--) {
memset(f, 0, sizeof(f));
f[0][0] = 1;
int fl = 0;
for (int i = 1; i <= n; i++) {
memset(g, 0, sizeof(g));
if (a[i] & (1 << p)) {
fl ^= 1;
a[i] -= (1 << p);
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
add(g[j ^ 1][k], 1ll * (a[i] + 1) % mod * f[j][k] % mod);
add(g[j][k | 1], 1ll * (1 << p) % mod * f[j][k] % mod);
}
}
} else {
for (int j = 0; j < 2; j++) {
for (int k = 0; k < 2; k++) {
add(g[j][k], 1ll * (a[i] + 1) % mod * f[j][k] % mod);
}
}
}
swap(f, g);
}
//cout << 1ll * f[0][1] * ksm(1 << p, mod - 2) % mod << endl;
add(ans, 1ll * f[0][1] * ksm(1 << p, mod - 2) % mod);
if (fl) break;
}
if (!sum) add(ans, 1);
cout << ans;
QwQ330AwA;
}
详细
小提示:点击横条可展开更详细的信息
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 0ms
memory: 1252kb
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: 42ms
memory: 1640kb
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: 38ms
memory: 1644kb
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: 9ms
memory: 1640kb
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: 1640kb
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: 1644kb
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: 1264kb
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: 1264kb
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: 18ms
memory: 1640kb
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: 18ms
memory: 1644kb
input:
100000 334373908 573410989 584461609 757523993 595819683 93095595 866600961 552146722 657326632 1804...
output:
633437866
result:
ok 1 number(s): "633437866"