답안 #26772

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
26772 2017-07-05T13:18:00 Z baactree Hotter Colder (IOI10_hottercolder) C++14
81 / 100
789 ms 8184 KB
#include "grader.h"
 
int HC(int N){
    int le,ri;
    int st,fi;
    st=1;
    fi=N;
    le=1;
    ri=N;
    
    //int pre=-1000;
 
    int pre=(le+ri)/2;
    Guess(pre);
 
    while(true){
        if(le==ri)
            return le;
        int mid=(le+ri)/2;
        int x=2*mid-pre;
        if(x==pre)
            x++;
        else if((x+pre)&1){
            if(x>pre){
                if(x<N)
                    x++;
                else if(x>pre+1&&x>1)
                    x--;
            }
            else{
                if(x>1)
                    x--;
                else if(x+1<pre&&x<N)
                    x++;
            }
        }
        if(x>=st&&x<=fi){
            int k=Guess(x);
            if(k==0)
                return (x+pre)/2;
            else if(k>0){
                if(x<pre){
                    ri=(x+pre)/2-((x+pre)%2==0);
                    pre=x;
                }
                else{
                    le=(x+pre)/2+1;
                    pre=x;
                }
            }
            else{
                if(x<pre){
                    le=(x+pre)/2+1;
                    pre=x;
                }
                else{
                    ri=(x+pre)/2-((x+pre)%2==0);
                    pre=x;
                }
            }
        }
        else{
            if(x<st){
                x=1;
            }
            else{
                x=N;
            }  
            if((x+pre)&1){
                if(x>pre){
                    if(x<N)
                        x++;
                    else if(x>pre+1&&x>1)
                        x--;
                }
                else{
                    if(x>1)
                        x--;
                    else if(x+1<pre&&x<N)
                        x++;
                }
            }
            int k=Guess(x);
            if(k==0)
                return (x+pre)/2;
            else if(k>0){
                if(x<pre){
                    ri=(x+pre)/2-((x+pre)%2==0);
                    pre=x;
                }
                else{
                    le=(x+pre)/2+1;
                    pre=x;
                }
            }
            else{
                if(x<pre){
                    le=(x+pre)/2+1;
                    pre=x;
                }
                else{
                    ri=(x+pre)/2-((x+pre)%2==0);
                    pre=x;
                }
            }
            //x=(le*2+ri)/3;
            //x=le;
            //Guess(x);
            //pre=x;
        }
    }
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 27 ms 1272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 38 ms 1272 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 28 ms 1304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 789 ms 8184 KB Output is partially correct - alpha = 0.250000000000