이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |