제출 #1023383

#제출 시각아이디문제언어결과실행 시간메모리
1023383NintsiChkhaidzeXOR Sum (info1cup17_xorsum)C++17
45 / 100
1672 ms56872 KiB
#include <bits/stdc++.h> #include <ostream> #define pb push_back #define s second #define f first #define pb push_back #define pii pair <int,int> #define ll long long #define left h*2,l,(l + r)/2 #define right h*2+1,(l + r)/2 + 1,r #define int ll using namespace std; const int N = 1e6 + 5,inf = 1e9; int a[N]; pii arr[N],b[N]; bool fix[N]; signed main() { ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); int n; cin>>n; for (int i = 1; i <= n; i++){ cin >> a[i]; } for (int j = 1; j <= n; j++) arr[j] = {(a[j] & ((1<<(0 + 1)) - 1)),j}; sort(arr+1,arr+n+1); int ans=0,add=0; for (int i = 0; i <= 30; i++){ int m = n; for (int j = 1; j <= n; j++){ int bb = ((a[arr[j].s] >> i) & 1); if(bb > 0) fix[j] = 1,arr[++m] = arr[j]; } int idx = 0; for (int j = 1; j <= m; j++){ if (fix[j]) continue; b[++idx] = arr[j]; } for (int j = 1; j <= n; j++){ int x = b[j].s; arr[j] = {(a[x] & ((1<<(i + 1)) - 1)),x}; fix[j] = 0; } vector <pair <pii,int> > v; for (int j = 1; j <= n; j++){ int sum = ((arr[j].f + arr[n].f) >> i) & 3; if (v.size() && v.back().s == sum) v.back().f.s += 1; else { v.pb({{j,j},sum}); } } int cnt = 0,add = 0; for (int j = n; j >= 1; j--){ vector <pair<pii,int> > vnew; for (int k = 0; k < v.size(); k++){ int l = v[k].f.f,r = v[k].f.s,val = v[k].s; while (r + 1 <= n){ int sum = (((arr[r + 1].f + arr[j].f) >> i) & 3); if (sum == val) r += 1; else break; } while (l <= n){ int sum = (((arr[l].f + arr[j].f) >> i) & 3); if (sum != val) l += 1; else break; } if (l <= r){ vnew.pb({{l,r},val}); } } sort(vnew.begin(),vnew.end()); int id = 1,k = 0; vector <pair<pii,int> > vec; while (k < vnew.size()){ if (id == vnew[k].f.f){ vec.pb(vnew[k]); id = vnew[k].f.s + 1; k++; }else{ int l = id,r = id,val = (((arr[id].f + arr[j].f) >> i) & 3); while (r + 1 <= n){ int sum = (((arr[r + 1].f + arr[j].f) >> i) & 3); if (sum == val) r += 1; else break; } vec.pb({{l,r},val}); id = r + 1; } } sort(vec.begin(),vec.end()); for (int k = 0; k <vec.size(); k++){ int s = vec[k].s; if (s == 3 || s == 1){ int l = vec[k].f.f,r = vec[k].f.s; l = max(l,j); cnt += max(0LL,(r - l + 1)); } } int s = (((arr[j].f*2) >> i) & 3); v = vec; } if (cnt & 1) ans |= (1LL<<i); } cout<<ans; }

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

xorsum.cpp: In function 'int main()':
xorsum.cpp:66:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<std::pair<long long int, long long int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   66 |       for (int k = 0; k < v.size(); k++){
      |                       ~~^~~~~~~~~~
xorsum.cpp:89:16: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<std::pair<long long int, long long int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   89 |       while (k < vnew.size()){
      |              ~~^~~~~~~~~~~~~
xorsum.cpp:108:25: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<std::pair<long long int, long long int>, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  108 |       for (int k = 0; k <vec.size(); k++){
      |                       ~~^~~~~~~~~~~
xorsum.cpp:4:11: warning: unused variable 'second' [-Wunused-variable]
    4 | #define s second
      |           ^~~~~~
xorsum.cpp:117:11: note: in expansion of macro 's'
  117 |       int s = (((arr[j].f*2) >> i) & 3);
      |           ^
xorsum.cpp:62:17: warning: unused variable 'add' [-Wunused-variable]
   62 |     int cnt = 0,add = 0;
      |                 ^~~
xorsum.cpp:33:13: warning: unused variable 'add' [-Wunused-variable]
   33 |   int ans=0,add=0;
      |             ^~~
#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...