QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#100917 | #5827. 异或图 | Scintilla | 30 | 10ms | 7960kb | C++14 | 3.3kb | 2023-04-28 17:37:53 | 2023-04-28 17:37:54 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i, s, e) for (int i = s; i <= e; ++i)
#define drep(i, s, e) for (int i = s; i >= e; --i)
#define file(a) freopen(#a".in", "r", stdin), freopen(#a".out", "w", stdout)
#define pv(a) cout << #a << " = " << a << endl
#define pa(a, l, r) cout << #a " : "; rep(_, l, r) cout << a[_] << ' '; cout << endl
const int P = 998244353;
const int N = 16;
const int M = 1 << N;
const int K = 14348907;
const int L = 60;
int read() {
int x = 0, f = 1; char c = getchar();
for (; c < '0' || c > '9'; c = getchar()) if (c == '-') f = -1;
for (; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - 48;
return x * f;
}
int inc(int a, int b) { return (a += b) >= P ? a - P : a; }
int dec(int a, int b) { return (a -= b) < 0 ? a + P : a; }
int mul(int a, int b) { return 1ll * a * b % P; }
void add(int &a, int b) { (a += b) >= P ? a -= P : 1; }
void sub(int &a, int b) { (a -= b) < 0 ? a += P : 1; }
int sgn(int x) { return x & 1 ? P - 1 : 1; }
int qpow(int a, int b) { int res = 1; for (; b; b >>= 1, a = mul(a, a)) if (b & 1) res = mul(res, a); return res; }
int n, m, c, a[N], id[N], rk[N], e[N], f[M], g[M], pw[N], dat[M], h[K], ans;
int dig(int x, int k) {
return (x / pw[k]) % 3;
}
int dp[N][2][2];
int calc(vector <int> val) {
int m = val.size(), s = 0, res = 0;
for (int x : val) s ^= x;
drep(i, L - 1, 0) {
memset(dp, 0, sizeof(dp));
dp[0][0][0] = 1;
rep(j, 0, m - 1) rep(x, 0, 1) rep(y, 0, 1) {
add(dp[j + 1][x ^ (val[j] >> i & 1)][y], mul(dp[j][x][y], (val[j] & ((1ll << i) - 1)) % P));
if (val[j] >> i & 1) {
add(dp[j + 1][x][1], mul(dp[j][x][y], y ? ((1ll << i) % P) : 1));
}
}
add(res, dp[m][c >> i & 1][1]);
if ((s >> i & 1) != (c >> i & 1)) break;
}
return res;
}
signed main() {
n = read(), m = read(), c = read();
pw[0] = 1;
rep(i, 1, n) pw[i] = mul(pw[i - 1], 3);
rep(i, 0, n - 1) a[i] = read() + 1, id[i] = i;
sort(id, id + n, [&](int i, int j) { return a[i] < a[j]; });
rep(i, 0, n - 1) rk[id[i]] = i;
sort(a, a + n);
rep(i, 1, m) {
int u = rk[read() - 1], v = rk[read() - 1];
e[u] |= 1 << v, e[v] |= 1 << u;
}
for (int s = 0; s < 1 << n; ++ s) {
g[s] = 1;
rep(i, 0, n - 1) if (s >> i & 1) {
g[s] &= !__builtin_popcount(e[i] & s);
dat[s] += pw[i];
}
f[s] = g[s];
if (!s) continue;
int p = __lg(s & -s);
for (int t = s & s - 1; t; t = s & t - 1) {
if (!(t >> p & 1)) continue;
sub(f[s], mul(f[t], g[s ^ t]));
}
}
h[0] = 1;
for (int s = 0; s < pw[n]; ++ s) if (h[s]) {
auto mn = [&]() {
rep(i, 0, n - 1) if (!dig(s, i)) return i;
return -1ll;
} ;
int p = mn();
if (!~p) {
vector <int> val;
rep(i, 0, n - 1) if (dig(s, i) == 2) val.emplace_back(a[i]);
add(ans, mul(h[s], calc(val)));
}
else {
int r = 0;
rep(i, p, n - 1) if (!dig(s, i)) r |= 1 << i;
for (int t = r; t; t = r & t - 1) {
if (!(t >> p & 1)) continue;
if (__builtin_parity(t)) {
add(h[s + dat[t] + pw[p]], mul(h[s], f[t]));
}
else {
add(h[s + dat[t]], mul(h[s], mul(f[t], a[p])));
}
}
}
}
printf("%d\n", ans);
return 0;
}
详细
Subtask #1:
score: 20
Accepted
Test #1:
score: 20
Accepted
time: 2ms
memory: 3588kb
input:
4 6 2 7 11 14 0 1 2 1 3 2 3 2 4 4 1 4 3
output:
44
result:
ok 1 number(s): "44"
Test #2:
score: 0
Accepted
time: 2ms
memory: 3476kb
input:
4 4 6 12 14 14 5 4 2 1 4 3 2 1 2
output:
798
result:
ok 1 number(s): "798"
Test #3:
score: 0
Accepted
time: 2ms
memory: 5508kb
input:
3 3 2 10 4 11 2 1 3 2 1 3
output:
33
result:
ok 1 number(s): "33"
Test #4:
score: 0
Accepted
time: 2ms
memory: 5508kb
input:
4 0 4 9 8 5 2
output:
148
result:
ok 1 number(s): "148"
Test #5:
score: 0
Accepted
time: 0ms
memory: 5636kb
input:
5 6 14 12 15 13 13 12 3 1 2 4 2 5 2 1 5 3 4 5
output:
21337
result:
ok 1 number(s): "21337"
Test #6:
score: 0
Accepted
time: 2ms
memory: 3500kb
input:
4 5 5 5 2 4 13 2 1 3 4 1 4 4 2 3 2
output:
42
result:
ok 1 number(s): "42"
Test #7:
score: 0
Accepted
time: 0ms
memory: 3596kb
input:
4 4 3 13 7 8 12 4 1 3 1 2 4 4 3
output:
552
result:
ok 1 number(s): "552"
Test #8:
score: 0
Accepted
time: 2ms
memory: 5548kb
input:
4 2 12 1 12 4 11 2 1 3 1
output:
70
result:
ok 1 number(s): "70"
Test #9:
score: 0
Accepted
time: 0ms
memory: 3480kb
input:
5 5 6 10 7 8 2 13 1 5 1 3 2 1 4 3 5 3
output:
1231
result:
ok 1 number(s): "1231"
Test #10:
score: 0
Accepted
time: 2ms
memory: 3488kb
input:
5 7 9 6 7 13 15 12 1 3 5 3 5 2 4 5 4 3 4 1 3 2
output:
6223
result:
ok 1 number(s): "6223"
Test #11:
score: 0
Accepted
time: 2ms
memory: 5640kb
input:
3 0 3 15 7 12
output:
104
result:
ok 1 number(s): "104"
Test #12:
score: 0
Accepted
time: 2ms
memory: 5636kb
input:
3 2 9 10 6 5 1 2 1 3
output:
17
result:
ok 1 number(s): "17"
Test #13:
score: 0
Accepted
time: 0ms
memory: 5572kb
input:
5 5 11 7 9 15 9 9 5 4 5 1 5 2 1 3 3 4
output:
5224
result:
ok 1 number(s): "5224"
Test #14:
score: 0
Accepted
time: 0ms
memory: 3548kb
input:
5 0 12 9 8 14 11 2
output:
3006
result:
ok 1 number(s): "3006"
Test #15:
score: 0
Accepted
time: 2ms
memory: 3500kb
input:
3 1 1 6 10 4 3 1
output:
30
result:
ok 1 number(s): "30"
Subtask #2:
score: 0
Wrong Answer
Dependency #1:
100%
Accepted
Test #16:
score: 0
Wrong Answer
time: 1ms
memory: 5648kb
input:
9 27 705410105529944560 929827299070190972 733413770730537329 473007347105710981 190062421504120247 918561152768663129 196040702922254016 981530663192980241 203295856357272834 337150461958783092 2 8 7 9 8 9 2 3 9 2 2 7 9 5 9 4 4 8 1 7 6 3 6 1 4 1 6 5 2 4 2 1 9 3 9 6 7 3 7 5 5 2 4 5 2 6 3 1 3 8 4 3 8 6
output:
824717695
result:
wrong answer 1st numbers differ - expected: '5392583', found: '824717695'
Subtask #3:
score: 10
Accepted
Test #47:
score: 10
Accepted
time: 10ms
memory: 7960kb
input:
14 0 731833687287532167 157552918690640051 900457311668526045 111217720157614956 84140984111060473 814012186135880499 784848789620248379 958953377683017264 105083874298571687 104921429970878846 44983041675142735 871013110538758030 686733907990421995 98063590462078176 495161493555059993
output:
231790380
result:
ok 1 number(s): "231790380"
Test #48:
score: 0
Accepted
time: 1ms
memory: 3848kb
input:
11 0 101435837408688522 638776638580507479 933944392115323974 19098604312360490 142362319980029593 419910251764515410 275591812677260089 770239593400917018 928344484461634421 67340905784404712 378109786925249078 110881245457449811
output:
242383534
result:
ok 1 number(s): "242383534"
Test #49:
score: 0
Accepted
time: 2ms
memory: 5700kb
input:
9 0 100988561775675251 622570387572403506 684352103903274038 784649864569409753 270298495621205212 56183537059869110 346856482529145989 86639702870530669 607198038565138736 14747634008501988
output:
20893166
result:
ok 1 number(s): "20893166"
Test #50:
score: 0
Accepted
time: 1ms
memory: 5656kb
input:
10 0 839910859917247463 611237879350518457 292219463776059962 548211857317940894 822255554598388425 335628456629874391 774414280870858683 882480367082748768 654587410087321403 74330774886125511 22894883233341926
output:
61697734
result:
ok 1 number(s): "61697734"
Subtask #4:
score: 0
Skipped
Dependency #1:
100%
Accepted
Dependency #2:
0%