제출 #517287

#제출 시각아이디문제언어결과실행 시간메모리
517287Ronin13XOR Sum (info1cup17_xorsum)C++14
77 / 100
1656 ms45652 KiB
#include<bits/stdc++.h> #define ll long long #define ull unsigned ll #define pb push_back #define epb emplace_back #define pii pair<int,int> #define pll pair<ll,ll> #define f first #define s second #define inf 1e9+1 #define linf 1e18+1 using namespace std; main(){ int n;cin>>n; ios_base::sync_with_stdio(false);cin.tie(0); int a[n+1]; int mx=0; for(int i=1;i<=n;i++){ cin>>a[i]; mx=max(mx,a[i]); } int ans=0; int vec[n]; if(mx<=1e6){ int pref[8*mx+1]; int xx=log2(mx)+2; for(int bt=1;bt<=xx;bt++){ for(int i=0;i<n;i++){ vec[i]=a[i+1]%(1<<bt); } for(int j=0;j<=8*mx;j++)pref[j]=0; for(int i=0;i<n;i++){ pref[vec[i]]++; } for(int i=1;i<=8*mx;i++)pref[i]+=pref[i-1]; int cnt=0; int l=(1<<(bt-1));int r=2*l; for(int i=0;i<n;i++){ int to=vec[i]; if(2*to>=l&&2*to<r)cnt++; if(2*to>=r+l)cnt++; cnt+=pref[r-to-1]; if(l>to)cnt-=pref[l-to-1]; cnt+=pref[8*mx]; if(r+l>to)cnt-=pref[r+l-to-1]; } cnt>>=1; if(cnt&1)ans+=(1<<(bt-1)); } cout<<ans<<"\n"; return 0; } mx=log2(mx); for(int bt=1;bt<=mx+2;bt++){ for(int i=0;i<n;i++){ vec[i]=a[i+1]%(1<<bt); } sort(vec,vec+n); int cnt=0; int l=(1<<(bt-1)),r=2*l; for(int i=0;i<n;i++){ int to=vec[i]; if(2*to>=l&&2*to<r)cnt++; if(2*to>=r+l)cnt++; cnt+=lower_bound(vec,vec+n,r-to)-lower_bound(vec,vec+n,l-to); cnt+=vec+n-lower_bound(vec,vec+n,r+l-to); } cnt>>=1; if(cnt&1)ans+=(1<<(bt-1)); } cout<<ans; return 0; }

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

xorsum.cpp:15:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   15 | main(){
      | ^~~~
#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...