Submission #1238379

#TimeUsernameProblemLanguageResultExecution timeMemory
1238379ema_nicoleHotter Colder (IOI10_hottercolder)C++17
0 / 100
486 ms136548 KiB
#include <iostream>
#include "grader.h"

using namespace std;

/*int Guess(int nr) {
    cout << "Guess-ul e " << nr << '\n';
    int a;
    cin >> a;
    return a;
}*/

int HC(int n) {
    if(n == 1)
        return 1;
    if(n == 2) {
        Guess(1);
        int tip = Guess(2);
        if(tip == 1) ///hotter
            return 2;
        return 1;
    }

    Guess(1);
    int st = 1, dr = n;
    int test = 2; ///1 --> st, 2 --> dr
    int ult = 1; ///care a fost ult cel mai hot

    while(st <= dr) { /// TBD!!!
        int tip;
        int mid = (st + dr) / 2;
        if(test == 1) { ///testam st
            tip = Guess(st);
            if(tip == -1) { ///cold --> mutam st-ul spre dr
                test = 1;
                if(dr - mid == mid - st) ///same --> NU merge
                    st = mid + 1;
                else if(mid - st < dr - mid) ///st e mai aproape --> NU merge
                    st = mid + 1;
                else ///dr e mai aproape
                    st = mid;
            }
            else if(tip == 0) ///gg done
                return mid;
            else { ///hot --> mutam dr-ul mai spre st
                ult = st;
                test = 2;
                if(dr - mid == mid - st) ///dist e same --> NU poa sa fie mid
                    dr = mid - 1;
                else if(mid - st < dr - mid) ///st e mai aproape --> se poate mid
                    dr = mid;
                else ///dr e mai aproape --> NU se poate mid
                    dr = mid - 1;
            }
        }
        else { ///testam dr
            tip = Guess(dr);
            if(tip == -1) { ///cold --> mutam spre st
                test = 2;
                if(dr - mid == mid - st) ///dist e same --> NU poa sa fie mid
                    dr = mid - 1;
                else if(mid - st < dr - mid) ///st e mai aproape --> se poate mid
                    dr = mid;
                else ///dr e mai aproape --> NU se poate mid
                    dr = mid - 1;
            }
            else if(tip == 0) ///same --> fix mij, done
                return mid;
            else { ///hot --> mutam st-ul mai spre dr
                ult = dr;
                test = 1;
                if(dr - mid == mid - st) ///same --> NU merge
                    st = mid + 1;
                else if(mid - st < dr - mid) ///st e mai aproape --> NU merge
                    st = mid + 1;
                else ///dr e mai aproape
                    st = mid;
            }
        }
    }
    return ult;
}
/*
int main()
{
    cout << HC(8);
    return 0;
}
*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...