Submission #1062368

#TimeUsernameProblemLanguageResultExecution timeMemory
1062368vjudge1Intergalactic ship (IZhO19_xorsum)C++17
17 / 100
2036 ms2136 KiB

#include <cstdio>
#include <array>
#include <vector>
#include <utility>
using namespace std;
template<typename T>
using ve = vector<T>;
using ii = pair<int, int>;
using ll = long long;
template <typename T, int sz>
using ar = array<T, sz>;

constexpr ll M = 1000000007;
constexpr int N = 1005;

ar<int, N> fac, ifac;

ar<int, N> eve, odd;

ll bpow(ll a, ll b) {
  if (!b) return 1;
  ll r { bpow(a, b / 2) };
  if (b & 1) return r * r % M * a % M;
  return r * r % M;
}

ll ncr(int n, int r) {
  if (n < r) return 0;
  return fac[n] * 1ll * ifac[r] % M * 1ll * ifac[n - r] % M;
}

ll gauss(int n) {
  return ncr(n + 1, 2);
}

void init() {
  fac[0] = ifac[0] = 1;
  for (int i = 1; i < N; ++i) fac[i] = fac[i - 1] * 1ll * i % M, ifac[i] = bpow(fac[i], M - 2);
  
  for (int i = 0; i < N; ++i)
    for (int j = 0; j <= i; ++j)
      if (j & 1)
        odd[i] = (odd[i] + ncr(i, j)) % M;
      else
        eve[i] = (eve[i] + ncr(i, j)) % M;
}

int main() {
  init();

  int n, q;
  scanf("%d", &n);
  ve<int> a(n);
  for (auto &x : a) scanf("%d", &x);

  scanf("%d", &q);
  ve<ar<int, 3 >> b(q);
  for (auto &[l, r, x] : b) scanf("%d%d%d", &l, &r, &x);

  ll ans { };

  for (int ii = 0; ii < (1 << q); ++ii) {
    static ll aa[102], ab[102];
    for (int i = 0; i <= n; ++i)
      aa[i] = 0;
    for (int j = 0; j < q; ++j) {
      if (ii & (1 << j)) {
        aa[b[j][0]] ^= b[j][2];
        aa[b[j][1] + 1] ^= b[j][2];
      }
    }
    for (int i = 1; i <= n; ++i) aa[i] ^= aa[i - 1], ab[i] = ab[i - 1] + (a[i - 1] ^ aa[i]);
    for (int i = 1; i <= n; ++i) for (int j = i; j <= n; ++j)
      ans = (ans + (ab[j] - ab[i - 1]) * (ab[j] - ab[i - 1]) % M) % M;
  }

  printf("%lld", ans);
  return 0;
}

Compilation message (stderr)

xorsum.cpp: In function 'int main()':
xorsum.cpp:53:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   53 |   scanf("%d", &n);
      |   ~~~~~^~~~~~~~~~
xorsum.cpp:55:26: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   55 |   for (auto &x : a) scanf("%d", &x);
      |                     ~~~~~^~~~~~~~~~
xorsum.cpp:57:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |   scanf("%d", &q);
      |   ~~~~~^~~~~~~~~~
xorsum.cpp:59:34: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   59 |   for (auto &[l, r, x] : b) scanf("%d%d%d", &l, &r, &x);
      |                             ~~~~~^~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...