답안 #1030392

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1030392 2024-07-22T04:31:50 Z sleepntsheep Colors (BOI20_colors) C
컴파일 오류
0 ms 0 KB
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int h(int i,int j){return i>j?i:j;}
int h_(int i,int j){return -h(-i,-j);}
int a_,past_ask[66],b_;
int ask(long long c){for(int j=0;j<b_;++j)if(past_ask[j]==c)return-1;past_ask[b_++]=c;printf("? %lld\n",c);fflush(stdout);scanf("%d",&a_);return a_;}
void report(int C){printf("= %d\n", C);fflush(stdout);exit(0);}
int main(){
    long long n;
    scanf("%lld",&n);
    if(n<=64){
        if(n==1)report(1);
        ask(1);
        if(!ask(n))report(n);
        for(int r=n-1,l=2,d=n-1,i=1,cc=0;cc<n-2;++i,--d,++cc)
            if(i%2&&!ask(l++))report(d);
            else if(i%2==0&&!ask(r--))report(d);
        report(1);
    }
    if(n<=125){
        int m = n / 2 + 1;
        ask(m);
        int mid = ask(1);
        if (!ask(n))report(n);
        if(mid){
            for(int r=m-1,l=2,d=m-1,i=1,cc=0;d>1;++i,--d,++cc)
                if(i%2&&!ask(l++))report(d);
                else if(i%2==0&&!ask(r--))report(d);
            report(1);
        }else{
            for(int r=n-1,l=2,d=n-1,i=1,cc=0;d>1;++i,--d,++cc){
                if(i%2){
                    if(l==m)report(1);
                    if(!ask(l++))report(d);
                }
                else if(i%2==0){
                    if(r==m)report(1);
                    else if(!ask(r--)) report(d);
                }
            }
        }
    }
    if(n<=1000){
        int S=floor(sqrt(n)),m=n/2+1;
        ask(m);
        int ll=m,rr=m;
        for(int ii=1;;++ii){
            if(ii%2){
                ll=h(ll-S,1);
                if(ask(ll)){
                    for(int r=rr-1,l=ll+1,d=rr-ll,i=1;d>1;++i,--d){
                        if(i%2){ if(!ask(l++))report(d);
                        }else{ if(!ask(r--))report(d);
                        }
                    }
                }
            }else{
                rr=h_(rr+S,n);
                if(ask(rr)){
                    for(int r=rr-1,l=ll+1,d=rr-ll,i=1;d>1;++i,--d){
                        if(i%2){ if(!ask(l++))report(d);
                        }else{ if(!ask(r--))report(d);
                        }
                    }
                }
            }
        }
    }
}

Compilation message

Colors.c: In function 'ask':
Colors.c:7:123: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
    7 | int ask(long long c){for(int j=0;j<b_;++j)if(past_ask[j]==c)return-1;past_ask[b_++]=c;printf("? %lld\n",c);fflush(stdout);scanf("%d",&a_);return a_;}
      |                                                                                                                           ^~~~~~~~~~~~~~~
Colors.c: In function 'main':
Colors.c:11:5: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 |     scanf("%lld",&n);
      |     ^~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccBKmP3T.o: in function `main':
Colors.c:(.text.startup+0x1af): undefined reference to `sqrt'
/usr/bin/ld: Colors.c:(.text.startup+0x1b4): undefined reference to `floor'
collect2: error: ld returned 1 exit status