# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
334361 | 2020-12-09T04:58:21 Z | CodeTiger927 | ČVENK (COI15_cvenk) | C++14 | 3000 ms | 93932 KB |
using namespace std; #include <iostream> #define MAXN 100005 struct node { node* c[2]; int x,y,s,xy; node(int _x,int _y): x(_x),y(_y),xy(_x + _y),s(0) { c[0] = c[1] = nullptr; } node* insert(node* next,bool lr) { s++; if(!c[lr]) c[lr] = next; if(next -> x < c[lr] -> x || next -> y < c[lr] -> y) { next -> c[lr] = c[lr]; next -> s += c[lr] -> s; c[lr] = next; return next; } if(next -> x > c[lr] -> x || next -> y > c[lr] -> y) { return c[lr] -> insert(next,lr); } return c[lr]; } }; node* root = new node(0,0); long long sum,ans; int N,qx[MAXN],qy[MAXN]; void dfs(node* cur,long long curN) { ans = min(ans,curN); if(cur -> c[0]) dfs(cur -> c[0],curN + (1ll * N - 2 * cur -> c[0] -> s) * (cur -> c[0] -> xy - cur -> xy)); if(cur -> c[1]) dfs(cur -> c[1],curN + (1ll * N - 2 * cur -> c[1] -> s) * (cur -> c[1] -> xy - cur -> xy)); } int main() { cin >> N; for(int i = 0;i < N;++i) { cin >> qx[i] >> qy[i]; sum += qx[i] + qy[i]; int curX,curY; curX = curY = 0; node* cur = root; for(int j = 29;j >= 0;--j) { if(qx[i] & (1 << j)) { curX += (1 << j); cur = cur -> insert(new node(curX,curY),0); }else if(qy[i] & (1 << j)) { curY += (1 << j); cur = cur -> insert(new node(curX,curY),1); } } } ans = sum; dfs(root,sum); cout << ans << endl; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Output is correct |
2 | Correct | 1 ms | 364 KB | Output is correct |
3 | Correct | 0 ms | 364 KB | Output is correct |
4 | Correct | 1 ms | 364 KB | Output is correct |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 1 ms | 364 KB | Output is correct |
2 | Incorrect | 1 ms | 364 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 211 ms | 26092 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 2425 ms | 92200 KB | Output is correct |
2 | Correct | 2475 ms | 93932 KB | Output is correct |
3 | Execution timed out | 3061 ms | 9452 KB | Time limit exceeded |
4 | Halted | 0 ms | 0 KB | - |