제출 #91812

#제출 시각아이디문제언어결과실행 시간메모리
91812SamAndXOR (IZhO12_xor)C++17
100 / 100
1840 ms15992 KiB
#include <iostream> #include <algorithm> #include <vector> #include <cmath> #include <map> using namespace std; const int N=1000000,M=31; int a[N], p[N], n; int x, y, b, t; int xx[M], yy[M]; int ansx=0,ansy=-1; void erk() { int i = 0; while(x || i < 30) { xx[i] = x % 2; ++i; x /= 2; } reverse(xx, xx + M); } void ubd() { map<int,int> mp; for(int i=0;i<=n;++i) { int mn = p[i]&b^y&b; if(mp.find(mn)!=mp.end() && (i-mp[mn]>ansy-ansx || (i-mp[mn]==ansy-ansx && i<ansx))) { ansx=mp[mn]; ansy=i; } if(mp.find(p[i]&b)==mp.end()) mp[p[i]&b]=i; } /// } int main() { //freopen("c.in","r",stdin); //freopen("c.out","w",stdout); //in scanf("%d%d",&n,&x); for(int i=1;i<=n;++i) scanf("%d",&a[i]); for(int i=1;i<=n;++i) p[i]=p[i-1]^a[i]; //// t=1; for(int i=0;i<M;++i) t*=2; --t; erk(); //// bool z=false; for(int i=0;i<M;++i) { b|=(1<<(M-1-i)); if(xx[i]==0) { yy[i]=1; y|=(1<<(M-1-i)); ubd(); yy[i]=0; y^=(1<<(M-1-i)); } else { z=true; yy[i]=1; y|=(1<<(M-1-i)); } if(!z) b^=(1<<(M-1-i)); } ubd(); //// cout<<ansx+1<<' '<<(ansy-(ansx+1)+1)<<endl; // system("pause"); return 0; }

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

xor.cpp: In function 'void ubd()':
xor.cpp:29:16: warning: suggest parentheses around arithmetic in operand of '^' [-Wparentheses]
   int mn = p[i]&b^y&b;
            ~~~~^~
xor.cpp: In function 'int main()':
xor.cpp:45:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d%d",&n,&x);
  ~~~~~^~~~~~~~~~~~~~
xor.cpp:47:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d",&a[i]);
   ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...