Submission #1267637

#TimeUsernameProblemLanguageResultExecution timeMemory
1267637ti24dung_ntCave (IOI13_cave)C++20
100 / 100
319 ms528 KiB
#include "cave.h"

void exploreCave(int n)
{
    int s[n], d[n], swch[n], stateOpen[n];

    for(int curDoor = 0; curDoor < n; ++curDoor)
    {
        for(int i = 0; i < n; ++i) s[i] = 0;
        for(int prevDoor = 0; prevDoor < curDoor; ++prevDoor) s[swch[prevDoor]] = stateOpen[prevDoor];
        int losestDoor = tryCombination(s);

        if(losestDoor == curDoor) stateOpen[curDoor] = 1;
        else stateOpen[curDoor] = 0;

        int l = 0, r = n - 1;
        while(l < r)
        {
            int mid = (l + r) / 2;

            for(int i = 0; i < n; ++i)
            {
                if(i <= mid) s[i] = 0;
                else s[i] = 1;
            }
            for(int prevDoor = 0; prevDoor < curDoor; ++prevDoor) s[swch[prevDoor]] = stateOpen[prevDoor];

            losestDoor = tryCombination(s);

            if(losestDoor == curDoor)
            {
                if(stateOpen[curDoor] == 0) l = mid + 1;
                else r = mid;
            }
            else
            {
                if(stateOpen[curDoor] == 0) r = mid;
                else l = mid + 1;
            }
        }

        d[l] = curDoor;
        swch[curDoor] = l;
    }

    for(int door = 0; door < n; ++door) s[swch[door]] = stateOpen[door];
    answer(s, d);
    
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...