Submission #905007

#TimeUsernameProblemLanguageResultExecution timeMemory
905007LucaLucaMIntergalactic ship (IZhO19_xorsum)C++17
0 / 100
2098 ms2904 KiB
#include <iostream> #include <vector> #include <algorithm> #include <cassert> #include <cstring> #warning That's the baby, that's not my baby #define int long long typedef long long ll; const int mod = 1e9 + 7; const int NMAX = 30; const int VMAX = 128; struct Update { int l, r, x; }; int cnt[VMAX][VMAX]; ll newCnt[VMAX][VMAX]; ll ways[NMAX][NMAX]; /// cnt[x][y] =def= pt cate subset uri am a[i] = x, a[j] = y? #define debug(x) #x << " = " << x signed main() { std::ios_base::sync_with_stdio(false); std::cin.tie(0); int n; std::cin >> n; std::vector<int> a(n); for (int i = 0; i < n; i++) { std::cin >> a[i]; } for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { ways[i][j] = (i + 1) * (n - j); } } int q; std::cin >> q; std::vector<Update> Q(q); for (auto &[l, r, v] : Q) { std::cin >> l >> r >> v; --l, --r; } ll answer = 0; for (int i = 0; i < n; i++) { for (int j = i; j < n; j++) { memset(cnt, 0, sizeof(cnt)); cnt[a[i]][a[j]] = 1; for (auto &[l, r, v] : Q) { for (int x = 0; x < VMAX; x++) { for (int y = 0; y < VMAX; y++) { int newX = x; int newY = y; if (l <= i <= r) { newX ^= v; } if (l <= j <= r) { newY ^= v; } newCnt[x][y] += cnt[x][y]; newCnt[newX][newY] += cnt[x][y]; } } for (int x = 0; x < VMAX; x++) { for (int y = 0; y < VMAX; y++) { cnt[x][y] = newCnt[x][y] % mod; newCnt[x][y] = 0; } } } for (int x = 0; x < VMAX; x++) { for (int y = 0; y < VMAX; y++) { if (i == j) { if (x == y) { // if (cnt[x][x] != 0) { // std::cout << "! " << x << ' ' << i << ' ' << cnt[x][x] << '\n'; // } answer += (ll) cnt[x][x] * x % mod * x % mod * ways[i][j] % mod; } } else { answer += (ll) 2 * cnt[x][y] * x % mod * y % mod * ways[i][j] % mod; } } } } } std::cout << answer % mod; return 0; }

Compilation message (stderr)

xorsum.cpp:6:2: warning: #warning That's the baby, that's not my baby [-Wcpp]
    6 | #warning That's the baby, that's not my baby
      |  ^~~~~~~
xorsum.cpp: In function 'int main()':
xorsum.cpp:65:19: warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning [-Wparentheses]
   65 |             if (l <= i <= r) {
      |                 ~~^~~~
xorsum.cpp:68:19: warning: comparisons like 'X<=Y<=Z' do not have their mathematical meaning [-Wparentheses]
   68 |             if (l <= j <= r) {
      |                 ~~^~~~
#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...