제출 #1205184

#제출 시각아이디문제언어결과실행 시간메모리
1205184dostsHow to Avoid Disqualification in 75 Easy Steps (CEOI23_avoid)C++20
25 / 100
1 ms424 KiB
#include <bits/stdc++.h>
#include "avoid.h"
#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2")
//#define int long long
#define pii pair<int,int> 
#define vi vector<int>
#define ff first
#define ss second
#define sp << " " << 
#define all(x) x.begin(),x.end()
using namespace std;
const int MOD = 1e9+7;

std::pair<int, int> scout(int R, int H) {
  if (H == 1) {
    if (R == 10) {
      int ans = 0;
      for (int i=0;i<10;i++) {
        vi v;
        for (int j = 0;j<1000;j++) {
          if (j&(1<<i)) v.push_back(j+1);
        }
        send(v);
      }
      vi rets = wait();
      for (int i = 0;i<10;i++) if (rets[i]) ans|=(1<<i);
      return {ans+1,ans+1};
    }
    else {
      
    }
  }
  else if (H == 2) {
    assert(R == 30);
    for (int i = 0;i<10;i++) {
      vi v,v2;
      for (int j = 0;j<1000;j++) {
        if (j&(1<<i)) v.push_back(j+1);
        else v2.push_back(j+1);
      }
      send(v);
      send(v2);
    }
    vi rets = wait();
    int diff = -1,diffs = 0;
    int orr = 0;
    for (int i = 0;i<10;i++) {
      if (rets[2*i] && rets[2*i+1]) diff = i,diffs|=(1<<i);
      if (rets[2*i]) orr|=(1<<i);
    }
    //ikisinde de olan bitler
    if (diff == -1) return {orr+1,orr+1};
    int p1 = 0;
    for (int i=0;i<10;i++) {
      vi v;
      for (int j = 0;j<1000;j++) {
        if ((j&(1<<diff)) && (j&(1<<i))) {
          v.push_back(j+1);
        }
      }
      send(v);
    }
    vi rets2 = wait();
    for (int i = 0;i<10;i++) if (rets2[i]) p1|=(1<<i);
    return {p1+1,(p1^diffs)+1};
  }
  else {
    //R = H = 20
    int l = 1;
    int r = 1000;
    while(l<=r) {
      int m = (l+r) >> 1;
      vi v;
      for (int i=1;i<=m;i++) v.push_back(i);
      send(v);
      int res = wait()[0];
      if (res) r = m-1;
      else l = m+1;
    }
    int p1 = l;
    l = p1;
    r = 1000;
    while(l<=r) {
      int m = (l+r) >> 1;
      vi v;
      for (int i = m;i<=1000;i++) v.push_back(i);
      send(v);
      int res = wait()[0];
      if (res) l = m+1;
      else r = m-1;
    }
    return {r,p1};
  }
}

컴파일 시 표준 에러 (stderr) 메시지

avoid.cpp: In function 'std::pair<int, int> scout(int, int)':
avoid.cpp:95:1: warning: control reaches end of non-void function [-Wreturn-type]
   95 | }
      | ^
#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...