제출 #1223155

#제출 시각아이디문제언어결과실행 시간메모리
1223155spetrHow to Avoid Disqualification in 75 Easy Steps (CEOI23_avoid)C++20
10 / 100
1 ms612 KiB
#include "avoid.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;



std::pair<int, int> scout(int R, int H) {


    if (H == 1){
        int velikost = 1;
        vector<vector<int>> v;
        for (int i = 0; i < 1000; i++){
            v.push_back({});
        }
        for (int i = 0; i < R; i++){
            vector<int> pole;
            for (int j = 1; j <= 1000; j+= 2*velikost){
                for (int k = j; k < j+velikost && k <= 1000; k++){
                    pole.push_back(k);
                    v[k-1].push_back(i);
                }
            }
            velikost *= 2;
            send(pole);
        }
        auto p = wait();
        for (int i = 0; i < 1000; i++){
            bool ok = true;
            for (int j = 0; j < v[i].size(); j++){
                if (p[v[i][j]] == 0){
                    ok = false;
                    break;
                } 
            }
            if (ok){
                return {i+1,i+1};
            }
        }
    }
    else{
        int l,r;
        l = 1;
        r = 1000;
        vector<int> p;
        while (l < r){
            vector<int> pole;
            int mid = (l+r)/2;
            for (int i = 1; i <= mid; i++){
                pole.push_back(i);
            }
            send(pole);
            p = wait();
            if (p[0] == 0){
                r = mid;
            }
            else{
                l = mid;
            }
        }
        int a = l;
        if (p[0] == 0){
            a++;
        }
        l = 1;
        r = 1000;
        while (l < r){
            vector<int> pole;
            int mid = (l+r)/2;
            for (int i = 1000; i >= mid; i--){
                pole.push_back(i);
            }
            send(pole);
            p = wait();
            if (p[0] == 0){
                l = mid;
            }
            else{
                r = mid;
            }
        }
        int b = l;
         if (p[0] == 0){
            b--;
        }
        return {a,b};
    }



    return {1,1};
  
}
#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...