# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
1142269 | Aria_lix19 | cmp (balkan11_cmp) | C++20 | 0 ms | 0 KiB |
#include "bits/cmp.h"
#include "bits/stdc++.h"
using namespace std;
vector<vector<int>>allmemory(6), allmemory2(6);
vector<int> turnto4(int n){
vector<int>base4;
int y = 6;
while(y--){
base4.push_back(n%4);
n /= 4;
}
reverse(base4.begin(),base4.end());
return base4;
}
long long turnto10(vector<int>&n){
long long num = 0;
for(int i = 0; i < n.size(); i++){
num += (pow(4, n.size()-1-i)*n[i]);
}
return num;
}
vector<int>A, B;
void remember(int a){
A = turnto4(a);
for(int i = 0; i < 6; i++){
allmemory[i].resize(pow(4, i+1)+1);
}
vector<int>sub;
for(int i = 0; i < 6; i++){
sub.push_back(A[i]);
allmemory[i][turnto10(sub)] = 1;
}
}
int compare(int b){
for(int i = 0; i < 6; i++){
allmemory2[i].resize(pow(4, i+1));
}
B = turnto4(b);
vector<int>sub;
for(int i = 0; i < 6; i++){
sub.push_back(B[i]);
allmemory2[i][turnto10(sub)] = 1;
}
int l = 0, r = 5, mid;
bool flag = 0;
while(l <= r){
mid = (l+r)/2;
if(allmemory[mid] != allmemory2[mid]){
flag = 1;
r = mid-1;
}
else{
l = mid+1;
}
}
if(!flag) return 0;
else if(B[l] == 0) return -1;
else if(B[l] == 3) return 1;
else if(B[l] == 2){
if(A[l] > B[l]) return -1;
else return 1;
}
else if(B[l] == 1){
if(A[l] < B[l]) return 1;
else return -1;
}
return 0;
}