# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1223154 | spetr | How to Avoid Disqualification in 75 Easy Steps (CEOI23_avoid) | C++20 | 0 ms | 0 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;
auto 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};
}