# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
91812 | SamAnd | XOR (IZhO12_xor) | C++17 | 1840 ms | 15992 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#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) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |