답안 #1074615

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1074615 2024-08-25T11:26:35 Z beaconmc Hotter Colder (IOI10_hottercolder) C++14
77.7778 / 100
2411 ms 8040 KB
    #include "grader.h"
        #include <bits/stdc++.h>
         
        typedef long long ll;
         
        #define FOR(i,x,y) for(ll i=x; i<y; i++)
        #define FORNEG(i,x,y) for(lli = x; i>y; i--)
        using namespace std;
         
         
        ll n;
        map<ll,ll> sus;
        ll cnt = 0;
        ll idkman = -1;
        int guess(ll a){
         
           if (a==0) return -1;
           if (a==n+1) return -1;
           cnt++;
           idkman = a;
           return Guess(a);
         
        }
        int solve(int a, int b){
           if (a==b) return a;
           
           ll lmao = rand()%2;
           // cout << lmao << endl;
           // cout << a << " " << b << endl;
         
           
           if (idkman == (a+b)/2  && n>500){
              // cout << "LMAO" << endl;
              ll mid = idkman;
              ll right = guess(idkman+1);
              if (right == -1){
                 return solve(a, mid);
              }else{
                 return solve(mid+1, b);
              }
           }
           else if (idkman == (a+b)/2+1  && n>500 ){
              // cout << "LMAO" << endl;
              ll mid = idkman;
              ll right = guess(idkman+1);
              if (right == -1){
                 return solve(a, mid);
              }else{
                 return solve(mid+1, b);
              }
           }
           else{
         
              if (lmao == 0){
                 ll mid = (a+b)/2;
                 ll midleft = (a+mid)/2;
                 ll midright = (b+mid+1)/2;
         
                 ll left, right;
                 left = guess(midleft);
                 right = guess(midright);
                 if (right == 0 ){
                    return (midleft+midright)/2;
                 }
                 else if (right == -1){
                    if ((midleft+midright)%2==0) return solve(a, mid-1);
                    return solve(a,mid);
                 }else{
                    return solve(mid+1, b);
                 }
              } else{
                 ll mid = (a+b)/2;
                 ll midleft = (a+mid)/2;
                 ll midright = (b+mid+1)/2;
         
                 ll left, right;
                 right = guess(midright);
                 left = guess(midleft);
                 
                 if (left == 0 ){
                    return (midleft+midright)/2;
                 }
                 else if (left == -1){
                    return solve(mid+1, b);
                 }else{
                    if ((midleft+midright)%2==0) return solve(a, mid-1);
                    return solve(a,mid);
                 }
              }
         
         
           }
        }
         
         
        int HC(int N){
           idkman = -1;
           srand(12361236);
           sus.clear();
           n = N;
           cnt = 0;
           ll ans = solve(1,N);
     
           return ans;
        }

Compilation message

hottercolder.cpp: In function 'int solve(int, int)':
hottercolder.cpp:59:21: warning: variable 'left' set but not used [-Wunused-but-set-variable]
   59 |                  ll left, right;
      |                     ^~~~
hottercolder.cpp:76:27: warning: variable 'right' set but not used [-Wunused-but-set-variable]
   76 |                  ll left, right;
      |                           ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 242 ms 6744 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 242 ms 6748 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 244 ms 6744 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Partially correct 2411 ms 8040 KB Output is partially correct - alpha = 0.111111111111