QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#823019#5053. Random ShuffleZhejiang U: Plenty of Penalty#WA 241ms3648kbC++202.5kb2024-12-20 18:22:042024-12-20 18:22:05

Judging History

This is the latest submission verdict.

  • [2024-12-20 18:22:05]
  • Judged
  • Verdict: WA
  • Time: 241ms
  • Memory: 3648kb
  • [2024-12-20 18:22:04]
  • Submitted

answer

#include <bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) begin(x), end(x)
#ifdef memset0
#define log(...) fprintf(stderr, __VA_ARGS__)
#else
#define log(...) (void(0))
#define endl '\n'
#endif
using namespace std;
using ll = long long;
using lf = long double;
using lll = __int128;
using ull = unsigned long long;
const int N = 1e5 + 10;
const int M = 70, B = 64;
int n, p[N], a[N], pos[N], rv[N], tp, sz;
ull fr[M];
ull b[M], b2[M], e[M], ans, prt;
void Trans() {
  for (int i = B - 1; i >= 13; --i) fr[i] ^= fr[i - 13];
  for (int i = 0; i < B - 7; ++i) fr[i] ^= fr[i + 7];
  for (int i = B - 1; i >= 17; --i) fr[i] ^= fr[i - 17];
}
void Ins(ull x, int t) {
  log("INS %llu %d\n", x, t);
  for (int i = 0; i < B; ++i) {
    if ((x >> i) & 1) {
      // log("in %d=1\n", i);
      if (!b[i]) {
        b[i] = x, e[i] = t;
        return;
      } else {
        x ^= b[i];
        t ^= e[i];
      }
    }
  }
  assert(!t);
}
ull xorshift(ull x) {
  x ^= x << 13;
  x ^= x >> 7;
  x ^= x << 17;
  return x;
}
void Check(ull tv) {
  ull x = tv;
  log("CHECK %llu\n", x);
  for (int i = 1; i <= n; ++i) {
    a[i] = i;
    x = xorshift(x);
    if (x % i != rv[i]) return;
  }
  cout << tv << "\n";
  exit(0);
}
int r[N], m;
int main() {
#ifdef memset0
  freopen("C.in", "r", stdin);
#endif
  cin.tie(0)->sync_with_stdio(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> p[i];
    a[i] = p[i];
    pos[a[i]] = i;
  }
  for (int i = n; i >= 1; --i) {
    tp = pos[i];
    rv[i] = tp - 1;
    log("pos %d=%d\n", i, rv[i]);
    if (tp != i) {
      pos[a[i]] = tp;
      swap(a[tp], a[i]);
    }
  }
  for (int i = 0; i < B; ++i) fr[i] = (1ull << i);
  for (int i = 1; i <= n; ++i) {
    Trans();
    for (int j = 0, t = i; !(t & 1); ++j, t >>= 1) {
      Ins(fr[j], (rv[i] >> j) & 1);
    }
    if (sz == B) break;
  }
  // assert(sz == B);

  for (int i = 0; i < B; ++i)
    if (!b[i]) {
      r[m++] = i;
    }
  for (int i = 0; i < B; ++i) b2[i] = b[i];
  // Check(16659580358178468547ull);
  for (int i = 0; i < (1 << m); ++i) {
    for (int j = 0; j < B; ++j) b[j] = b2[j];
    for (int j = 0; j < m; ++j) {
      b[r[j]] = (1ull << r[j]);
      e[r[j]] = ((i >> j) & 1);
    }
    for (int j = B - 1; j >= 0; --j) {
      for (int k = j - 1; k >= 0; --k) {
        if ((b[k] >> j) & 1) {
          b[k] ^= b[j];
          e[k] ^= e[j];
        }
      }
    }

    for (int j = B - 1; j >= 0; --j) {
      ans = ((ans << 1) | e[j]);
    }
    Check(ans);
  }
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Wrong Answer
time: 241ms
memory: 3648kb

input:

50
36 22 24 21 27 50 28 14 25 34 18 43 47 13 30 7 10 48 20 16 29 9 8 15 3 31 12 38 19 49 37 1 46 32 4 44 11 35 6 33 26 5 45 17 39 40 2 23 42 41

output:


result:

wrong output format Unexpected end of file - int64 expected