| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1354655 | vjudge1 | XOR (IZhO12_xor) | C++17 | 88 ms | 25068 KiB |
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int INF = 1e18;
const int M = 29;
struct Node
{
int child[2], mn;
Node()
{
child[0] = child[1] = -1;
mn = INF;
}
};
vector<Node> trie;
void add(int val, int id)
{
int u = 0;
trie[u].mn = min(trie[u].mn, id);
for(int i = M; i >= 0; i--)
{
int bit = (val >> i) & 1;
if(trie[u].child[bit] == -1)
{
trie[u].child[bit] = trie.size();
trie.push_back(Node());
}
u = trie[u].child[bit];
trie[u].mn = min(trie[u].mn, id);
}
}
int get(int val, int x)
{
int u = 0;
int res = INF;
for(int i = M; i >= 0; i--)
{
if(u == -1) return res;
int b1 = (val >> i) & 1;
int b2 = (x >> i) & 1;
if(b2 == 0)
{
int nxt = 1 - b1;
if(trie[u].child[nxt] != -1)
res = min(res, trie[trie[u].child[nxt]].mn);
u = trie[u].child[b1];
}
else u = trie[u].child[1 - b1];
}
if(u != -1) res = min(res, trie[u].mn);
return res;
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#define name "task"
if(fopen(name".inp", "r"))
{
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
int n, x;
cin >> n >> x;
trie.push_back(Node());
add(0, 0);
int px = 0;
int st = -1, len = -1;
for(int i = 1; i <= n; i++)
{
int a;
cin >> a;
px ^= a;
int pos = get(px, x);
if(pos != INF)
{
int cur = i - pos;
if(cur > len)
{
len = cur;
st = pos + 1;
}
else if(cur == len) st = min(st, pos + 1);
}
add(px, i);
}
if(st != -1) cout << st << ' ' << len;
}
컴파일 시 표준 에러 (stderr) 메시지
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
