제출 #564104

#제출 시각아이디문제언어결과실행 시간메모리
564104StickfishIntergalactic ship (IZhO19_xorsum)C++17
28 / 100
2088 ms1460 KiB
#include <iostream> #include <vector> using namespace std; using ll = long long; const int MAXN = 1008; const ll MOD = 1000000007; int a[MAXN]; vector<int> updt(vector<int>& cnts, int t) { vector<int> ans = cnts; for (int i = 0; i < 128; ++i) { ans[i ^ t] += cnts[i]; if (ans[i ^ t] >= MOD) ans[i ^ t] -= MOD; } return ans; } bool in(pair<int, int> sg, int i) { return sg.first <= i && i < sg.second; } signed main() { int n; cin >> n; for (int i = 0; i < n; ++i) cin >> a[i]; int q; cin >> q; vector<pair<pair<int, int>, int>> qrs(q); for (int i = 0; i < q; ++i) { cin >> qrs[i].first.first >> qrs[i].first.second >> qrs[i].second; --qrs[i].first.first; } ll ans = 0; //for (int i = 0; i < n; ++i) { //vector<int> cnts(128); //cnts[a[i]] = 1; //for (auto [sg, x] : qrs) { //if (in(sg, i)) //cnts = updt(cnts, x); //} //for (int x = 0; x < 128; ++x) { //ans += 1ll * (i + 1) * (n - i) * x * x % MOD * cnts[x]; //ans %= MOD; //} //} for (int i = 0; i < n; ++i) { for (int j = i; j < n; ++j) { vector<int> cntsi(128); vector<int> cntsj(128); vector<int> cntsij(128); cntsi[a[i]] = cntsj[a[j]] = cntsij[0] = 1; for (auto [sg, x] : qrs) { bool ini = in(sg, i); bool inj = in(sg, j); if (ini && !inj) { cntsi = updt(cntsi, x); } else if (!ini && inj) cntsj = updt(cntsj, x); else if (ini && inj) cntsij = updt(cntsij, x); else cntsij = updt(cntsij, 0); } ll ans0 = ans; ll addans = 0; for (int xi = 0; xi < 128; ++xi) { if (cntsi[xi] == 0) continue; for (int xj = 0; xj < 128; ++xj) { if (cntsj[xj] == 0) continue; for (int xij = 0; xij < 128; ++xij) { if (cntsij[xij] == 0) continue; if (i != j) addans += 2ll * (xi ^ xij) * (xj ^ xij) * cntsi[xi] % MOD * cntsj[xj] % MOD * cntsij[xij]; else addans += 1ll * (xi ^ xij) * (xj ^ xij) * cntsi[xi] % MOD * cntsj[xj] % MOD * cntsij[xij]; addans %= MOD; } } } addans *= (i + 1) * (n - j); ans += addans; ans %= MOD; //cout << i << ' ' << j << ": " << ans - ans0 << endl; } } cout << ans << endl; }

컴파일 시 표준 에러 (stderr) 메시지

xorsum.cpp: In function 'int main()':
xorsum.cpp:67:16: warning: unused variable 'ans0' [-Wunused-variable]
   67 |             ll ans0 = ans;
      |                ^~~~
#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...