#include "cmp.h"
#include <iostream>
using namespace std;
int val;
//여기저장이 아니라 memory에 저장인듯
//4095만드는데 12번 필요
//크기 비교를 용이하게 하기 위해서 어떻게 10240개를 사용해야할까?
void remember(int a) {
int cnt=1;
//4096 기준으로
//2048 보다 업다운 체크 1이면 업 0이면 다운
//
//8 -> 1000
a+=1;//이걸로 될까?
int start = 1;
int end = 4096;
//계속 찾았는데 숫자가 없으면
//있는지 없는지는 4096 더한 어떤 bit을 확인하면 되나?
//4096
//4096
//1+4096
while(start<=end){
int mid = (start+end)/2;
//크면 set
// cout << "mid : " << mid << endl;
if(a>mid){
bit_set(mid);
start=mid+1;
}else if(a<mid){
end=mid-1;
}else if(a==mid){
bit_set(mid);
bit_set(mid+4096);
return;
}
}
}
//특수한 경우에만 10개를 넘는듯하다
//숫자 자체를 만들기 힘든경우
//1022,2046,4094,4095의 경우 10,11,12,13 //4개빼고 9개 선에서 컷되는데
int compare(int b) {
b+=1;
int start=1;
int end = 4096;
// if(b==1022 || b==2046 || b==4094 || b==4095){
// if(b==1022 && bit_get(1024)){
// return -1;
// }else if(b==1022 && bit_get(1024)){
// }
// }
while(start<=end){
int mid = (start+end)/2;
//크면 set
int a_bit = bit_get(mid);
//등호처리를 좀 잘 해야할거같다
//같은 범위는 옮겨만 준다.
if(a_bit && b>mid){ //a가 mid보다 크거나 b도 mid보다 큰 경우
start=mid+1;
}else if(a_bit && b<mid){
// cout << "mid and b : " << mid << " , " << b << endl;
return -1;
}else if(a_bit && b==mid){//a는 mid보다 크거나 같은데 , b는 mid임
if(bit_get(mid+4096))// mid+4096이 check 되어 있으면 같은거임 그게 아니면 a가 더 큰거임
return 0;
else{//여기서 걸렸네
// cout << "hello" << endl;
return -1;
}
}else if(!a_bit && b>=mid){//a는 mid보다 작으면서 b는 mid보다 큰경우
return 1;
}else if(!a_bit && b<mid){ //a는 mid보다 작고, b도 mid보다 작고
end = mid-1;
}
}
}
//최종 목표는 a,b를 비교한 값을 내놓아라
//compare에서는 a를 찾아야하고
//remember에서는 address를 찾아야하고?
//bitset ,bitget해야만 하는 상황에서만 해야한다?
//set을하지 못하면 get도 하지 못한다.
//뭘 저장해야하는가?
Compilation message
cmp.cpp: In function 'void remember(int)':
cmp.cpp:11:7: warning: unused variable 'cnt' [-Wunused-variable]
11 | int cnt=1;
| ^~~
cmp.cpp: In function 'int compare(int)':
cmp.cpp:93:1: warning: control reaches end of non-void function [-Wreturn-type]
93 | }
| ^
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Incorrect |
2302 ms |
101612 KB |
ZERO POINTS: more than 20 accesses in the worst case |