Submission #76586635
Source Code Expand
#include <bits/stdc++.h>
#pragma GCC optimize("Ofast,unroll-loops")
#pragma GCC target("avx2,popcnt")
using namespace std;
using u32 = uint32_t;
using u64 = uint64_t;
template <class T>
using vc = vector<T>;
#define FOR(i, a, b) for (int i = (a); i < int(b); ++i)
#define all(x) (x).begin(), (x).end()
#define len(x) int(x.size())
#define eb emplace_back
template <typename T, int N>
inline void hadamard_rec(T* a) {
if constexpr (N <= 1) return;
constexpr int H = N / 2;
hadamard_rec<T, H>(a);
hadamard_rec<T, H>(a + H);
for (int i = 0; i < H; ++i) {
auto x = a[i], y = a[H + i];
a[i] = x + y, a[H + i] = x - y;
}
}
template <typename T, int N = (1 << 20)>
void hadamard(vc<T>& a) {
if constexpr (N <= 1) return;
int n = len(a);
if (n == N) return hadamard_rec<T, N>(a.data());
return hadamard<T, N / 2>(a);
}
void solve() {
int N, M;
cin >> N >> M;
vc<int> C(1 << M);
FOR(i, 0, N) {
int a;
cin >> a;
C[a]++;
}
vc<int> ids;
FOR(i, 0, 1 << M) if (C[i] > 0) ids.eb(i);
sort(all(ids), [&](auto& a, auto& b) -> bool { return C[a] < C[b]; });
vc<int> D;
for (int i : ids) {
if (D.empty() || D.back() != C[i]) D.eb(C[i]);
}
int K = len(D);
vc<u64> S(1 << M), T(1 << M);
int B = (K + 2) / 3;
int p = 0;
FOR(blk, 0, B) {
vc<int> CF;
FOR(i, 0, 3) {
int x = 3 * blk + i;
if (len(D) <= x) {
CF.eb(0);
continue;
}
CF.eb(x == 0 ? D[x] : D[x] - D[x - 1]);
while (p < len(ids) && C[ids[p]] < D[x]) ++p;
FOR(j, p, len(ids)) S[ids[j]] |= u64(1) << (20 * i);
}
hadamard(S);
const u64 base = 1 << 20;
FOR(k, 0, 1 << M) {
u64 x = S[k];
u64 a = x & (base - 1);
u64 b = (x >> 20) & (base - 1);
u64 c = (x >> 40) & (base - 1);
S[k] = 0;
if (a > base - a) {
a -= base, b += 1;
}
if (b > base - b) {
b -= base, c += 1;
}
if (c > base - c) {
c -= base;
}
T[k] += a * a * CF[0];
T[k] += b * b * CF[1];
T[k] += c * c * CF[2];
}
}
hadamard(T);
vc<u64> ANS(1 << M);
FOR(i, 0, 1 << M) ANS[i] = T[i] >> (M + 1);
ANS[0] = 0;
FOR(i, 0, 1 << M) ANS[0] += C[i] / 2;
const u32 mod = 998244353;
reverse(ANS.begin(), ANS.end());
u64 ans = 0;
for(u64 x : ANS) ans = (10 * ans + x) % mod;
cout << ans << "\n";
}
signed main() {
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
solve();
}
Submission Info
| Submission Time | |
|---|---|
| Task | E - XOR Matching |
| User | maspy |
| Language | C++23 (GCC 15.2.0) |
| Score | 700 |
| Code Size | 2589 Byte |
| Status | AC |
| Exec Time | 1293 ms |
| Memory | 33164 KiB |
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 700 / 700 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt |
| All | 01_sample_01.txt, 01_sample_02.txt, 01_sample_03.txt, 02_small_M_01.txt, 02_small_M_02.txt, 02_small_M_03.txt, 02_small_M_04.txt, 02_small_M_05.txt, 02_small_M_06.txt, 03_rand_1_01.txt, 03_rand_1_02.txt, 04_rand_2_01.txt, 04_rand_2_02.txt, 04_rand_2_03.txt, 04_rand_2_04.txt, 05_rand_3_01.txt, 05_rand_3_02.txt, 05_rand_3_03.txt, 05_rand_3_04.txt, 05_rand_3_05.txt, 05_rand_3_06.txt, 05_rand_3_07.txt, 05_rand_3_08.txt, 05_rand_3_09.txt, 05_rand_3_10.txt, 05_rand_3_11.txt, 05_rand_3_12.txt, 05_rand_3_13.txt, 05_rand_3_14.txt, 05_rand_3_15.txt, 06_distinct_freq_01.txt, 06_distinct_freq_02.txt, 06_distinct_freq_03.txt, 07_diverse_freq_01.txt, 07_diverse_freq_02.txt, 07_diverse_freq_03.txt, 08_distinct_freq_capped_01.txt, 08_distinct_freq_capped_02.txt, 08_distinct_freq_capped_03.txt, 08_distinct_freq_capped_04.txt, 08_distinct_freq_capped_05.txt, 08_distinct_freq_capped_06.txt, 08_distinct_freq_capped_07.txt, 08_distinct_freq_capped_08.txt, 08_distinct_freq_capped_09.txt, 08_distinct_freq_capped_10.txt, 08_distinct_freq_capped_11.txt, 09_distinct_freq_capped_2_01.txt, 09_distinct_freq_capped_2_02.txt, 09_distinct_freq_capped_2_03.txt, 09_distinct_freq_capped_2_04.txt, 09_distinct_freq_capped_2_05.txt, 09_distinct_freq_capped_2_06.txt, 09_distinct_freq_capped_2_07.txt, 09_distinct_freq_capped_2_08.txt, 09_distinct_freq_capped_2_09.txt, 09_distinct_freq_capped_2_10.txt, 09_distinct_freq_capped_2_11.txt, 10_distinct_freq_capped_3_01.txt, 10_distinct_freq_capped_3_02.txt, 10_distinct_freq_capped_3_03.txt, 10_distinct_freq_capped_3_04.txt, 10_distinct_freq_capped_3_05.txt, 10_distinct_freq_capped_3_06.txt, 10_distinct_freq_capped_3_07.txt, 10_distinct_freq_capped_3_08.txt, 10_distinct_freq_capped_3_09.txt, 10_distinct_freq_capped_3_10.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01_sample_01.txt | AC | 2 ms | 3600 KiB |
| 01_sample_02.txt | AC | 1 ms | 3532 KiB |
| 01_sample_03.txt | AC | 1 ms | 3712 KiB |
| 02_small_M_01.txt | AC | 8 ms | 3616 KiB |
| 02_small_M_02.txt | AC | 7 ms | 3624 KiB |
| 02_small_M_03.txt | AC | 6 ms | 3712 KiB |
| 02_small_M_04.txt | AC | 7 ms | 3668 KiB |
| 02_small_M_05.txt | AC | 7 ms | 3616 KiB |
| 02_small_M_06.txt | AC | 7 ms | 3800 KiB |
| 03_rand_1_01.txt | AC | 8 ms | 5560 KiB |
| 03_rand_1_02.txt | AC | 9 ms | 7352 KiB |
| 04_rand_2_01.txt | AC | 24 ms | 11408 KiB |
| 04_rand_2_02.txt | AC | 24 ms | 11332 KiB |
| 04_rand_2_03.txt | AC | 25 ms | 11392 KiB |
| 04_rand_2_04.txt | AC | 25 ms | 11308 KiB |
| 05_rand_3_01.txt | AC | 51 ms | 33076 KiB |
| 05_rand_3_02.txt | AC | 52 ms | 32548 KiB |
| 05_rand_3_03.txt | AC | 43 ms | 32492 KiB |
| 05_rand_3_04.txt | AC | 37 ms | 32528 KiB |
| 05_rand_3_05.txt | AC | 36 ms | 32424 KiB |
| 05_rand_3_06.txt | AC | 35 ms | 32328 KiB |
| 05_rand_3_07.txt | AC | 35 ms | 32384 KiB |
| 05_rand_3_08.txt | AC | 39 ms | 32232 KiB |
| 05_rand_3_09.txt | AC | 42 ms | 32232 KiB |
| 05_rand_3_10.txt | AC | 41 ms | 32136 KiB |
| 05_rand_3_11.txt | AC | 42 ms | 32120 KiB |
| 05_rand_3_12.txt | AC | 45 ms | 32176 KiB |
| 05_rand_3_13.txt | AC | 41 ms | 32112 KiB |
| 05_rand_3_14.txt | AC | 41 ms | 32272 KiB |
| 05_rand_3_15.txt | AC | 41 ms | 32256 KiB |
| 06_distinct_freq_01.txt | AC | 1293 ms | 32172 KiB |
| 06_distinct_freq_02.txt | AC | 1271 ms | 32200 KiB |
| 06_distinct_freq_03.txt | AC | 1270 ms | 32176 KiB |
| 07_diverse_freq_01.txt | AC | 407 ms | 32232 KiB |
| 07_diverse_freq_02.txt | AC | 349 ms | 32200 KiB |
| 07_diverse_freq_03.txt | AC | 316 ms | 32272 KiB |
| 08_distinct_freq_capped_01.txt | AC | 53 ms | 32456 KiB |
| 08_distinct_freq_capped_02.txt | AC | 57 ms | 32264 KiB |
| 08_distinct_freq_capped_03.txt | AC | 56 ms | 32328 KiB |
| 08_distinct_freq_capped_04.txt | AC | 70 ms | 32372 KiB |
| 08_distinct_freq_capped_05.txt | AC | 66 ms | 32236 KiB |
| 08_distinct_freq_capped_06.txt | AC | 79 ms | 32200 KiB |
| 08_distinct_freq_capped_07.txt | AC | 109 ms | 32232 KiB |
| 08_distinct_freq_capped_08.txt | AC | 139 ms | 32184 KiB |
| 08_distinct_freq_capped_09.txt | AC | 239 ms | 32184 KiB |
| 08_distinct_freq_capped_10.txt | AC | 428 ms | 32232 KiB |
| 08_distinct_freq_capped_11.txt | AC | 1016 ms | 32184 KiB |
| 09_distinct_freq_capped_2_01.txt | AC | 63 ms | 32496 KiB |
| 09_distinct_freq_capped_2_02.txt | AC | 61 ms | 32456 KiB |
| 09_distinct_freq_capped_2_03.txt | AC | 65 ms | 32512 KiB |
| 09_distinct_freq_capped_2_04.txt | AC | 66 ms | 32508 KiB |
| 09_distinct_freq_capped_2_05.txt | AC | 73 ms | 32384 KiB |
| 09_distinct_freq_capped_2_06.txt | AC | 80 ms | 32328 KiB |
| 09_distinct_freq_capped_2_07.txt | AC | 98 ms | 32296 KiB |
| 09_distinct_freq_capped_2_08.txt | AC | 109 ms | 32124 KiB |
| 09_distinct_freq_capped_2_09.txt | AC | 144 ms | 32200 KiB |
| 09_distinct_freq_capped_2_10.txt | AC | 233 ms | 32244 KiB |
| 09_distinct_freq_capped_2_11.txt | AC | 429 ms | 32256 KiB |
| 10_distinct_freq_capped_3_01.txt | AC | 72 ms | 33164 KiB |
| 10_distinct_freq_capped_3_02.txt | AC | 73 ms | 33136 KiB |
| 10_distinct_freq_capped_3_03.txt | AC | 77 ms | 33108 KiB |
| 10_distinct_freq_capped_3_04.txt | AC | 90 ms | 33004 KiB |
| 10_distinct_freq_capped_3_05.txt | AC | 88 ms | 33092 KiB |
| 10_distinct_freq_capped_3_06.txt | AC | 93 ms | 33004 KiB |
| 10_distinct_freq_capped_3_07.txt | AC | 114 ms | 33148 KiB |
| 10_distinct_freq_capped_3_08.txt | AC | 143 ms | 33152 KiB |
| 10_distinct_freq_capped_3_09.txt | AC | 240 ms | 33004 KiB |
| 10_distinct_freq_capped_3_10.txt | AC | 991 ms | 32652 KiB |