답안 #339073

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
339073 2020-12-24T14:21:42 Z nandonathaniel 비교 (balkan11_cmp) C++14
100 / 100
2180 ms 102380 KB
#include "cmp.h"
#include "bits/stdc++.h"
using namespace std;

int A[6];

void remember(int n) {
	//tambah 1 di depan, supaya bisa dibedain
	//partisi 3,2,2,2,2,2
	n^=(1<<12);
	//yang di set prefixnya
	bit_set((n & (7<<10))>>10);
	bit_set((n & (31<<8))>>8);
	bit_set((n & (127<<6))>>6);
	bit_set((n & (511<<4))>>4);
	bit_set((n & (2047<<2))>>2);
	bit_set(n & 8191);
}

int compare(int a) {
	a^=(1<<12);
	A[0]=(a & (7<<10))>>10;
	A[1]=(a & (31<<8))>>8;
	A[2]=(a & (127<<6))>>6;
	A[3]=(a & (511<<4))>>4;
	A[4]=(a & (2047<<2))>>2;
	A[5]=a & 8191;
	//cari pertama yang beda
	int ki=0,ka=6;
	while(ki<ka){
		int mid=(ki+ka)/2;
		if(bit_get(A[mid])){
			ki=mid+1;
		}
		else ka=mid;
	}
	if(ki==6){
		//sama semua
		return 0;
	}
	int sama;
	if(ki==0)sama=4;
	else sama=A[ki-1]<<2;
	if((A[ki] & 3)==0)return -1;
	else if((A[ki] & 3)==1){
		if(bit_get(sama))return 1;
		else return -1;
	}
	else if((A[ki] & 3)==2){
		if(bit_get(sama^3))return -1;
		else return 1;
	}
	else return 1;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 2180 ms 102380 KB Output is correct - maxAccess = 10, score = 100