답안 #26791

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
26791 2017-07-05T17:32:21 Z baactree 비교 (balkan11_cmp) C++14
0 / 100
947 ms 90952 KB
#include "cmp.h"
//4+3+3=10
void remember(int n) {
    int ri=10240;
    bit_set(ri-n);
    ri-=4096;
    bit_set(ri-n/64);
    ri-=64;
    int a,b;
    a=n/64;
    bit_set(ri-a/8);
    ri-=8;
    b=n%64;
    bit_set(ri-b/8);
}

int compare(int b) {
    //일치하는 경우 제외
    int ri=10240;
    if(bit_get(ri-b))
        return 0;
    ri-=4096;
    int k=b/64;
    //일치함 따라서 뒤 6비트 봐야함
    if(bit_get(ri-k)){
        ri-=64;
        ri-=8;
        int p=b%64;
        //일치함 뒤 3비트로 확인해야함 3번 구간
        if(bit_get(ri-p/8)){
            int r=0;
            int t=7<<r;
            int q=(b&t)>>r;
            int w=b&(~t);
            if(q<4){
                //0 1 2
                for(int i=0;i<q;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return 1;
                }
                return -1;
            }
            else{
                //5 6 7
                for(int i=q+1;i<8;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return -1;
                }
                return 1;
            }
        }
        //불일치함 앞 3비트로 확인해야함 2번 구간
        else{
            int r=3;
            int t=7<<r;
            int q=(b&t)>>r;
            int w=b&(~t);
            if(q<4){
                //0 1 2
                for(int i=0;i<q;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return 1;
                }
                return -1;
            }
            else{
                //5 6 7
                for(int i=q+1;i<8;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return -1;
                }
                return 1;
            }
        }
    }
    //불일치함 따라서 앞 6비트 봐야함
    else{
        ri-=64;
        int p=b/64;
        //일치함 뒤 3비트로 확인해야함 1번 구간
        if(bit_get(ri-p/8)){
            int r=6;
            int t=7<<r;
            int q=(b&t)>>r;
            int w=b&(~t);
            if(q<4){
                //0 1 2
                for(int i=0;i<q;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return 1;
                }
                return -1;
            }
            else{
                //5 6 7
                for(int i=q+1;i<8;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return -1;
                }
                return 1;
            }
        }
        //불일치함 앞 3비트로 확인해야함 0번 구간
        else{
            int r=9;
            int t=7<<r;
            int q=(b&t)>>r;
            int w=b&(~t);
            if(q<4){
                //0 1 2
                for(int i=0;i<q;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return 1;
                }
                return -1;
            }
            else{
                //5 6 7
                for(int i=q+1;i<8;i++){
                    int now=w+(i<<r);
                    if(bit_get(10240-now))
                        return -1;
                }
                return 1;
            }
        }
    }
}

# 결과 실행 시간 메모리 Grader output
1 Incorrect 947 ms 90952 KB ZERO POINTS: For a=479 and b=1004, correct answer is 1, got -1