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
AC × 3
AC × 68
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