답안 #362537

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
362537 2021-02-03T15:07:00 Z ray5273 비교 (balkan11_cmp) C++14
0 / 100
2302 ms 101612 KB
#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