QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#887045#10071. HorawsyearCompile Error//C++202.5kb2025-02-07 14:28:142025-02-07 14:28:16

Judging History

This is the latest submission verdict.

  • [2025-02-07 14:28:16]
  • Judged
  • [2025-02-07 14:28:14]
  • Submitted

answer

#include <bits/stdc++.h>

int ask(int, int);
int solve(int, int);

#define rep(i, j, k) for (int i = (j); i <= (k); ++i)
#define per(i, j, k) for (int i = (j); i >= (k); --i)
#define SZ(v) int((v).size())
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second
using ll = long long;
using pii = std::pair<int, int>;
using pll = std::pair<ll, ll>;

template<class T> void chkmn(T &x, T y) { if (y < x) x = y; }
template<class T> void chkmx(T &x, T y) { if (y > x) x = y; }

using namespace std;

int n, k;

int ask(int l, int r) {
  cout << "? " << l << " " << r << endl;
  return cin >> l, l;
}

int qry(int l, int r) {
  int len = l <= r ? r - l + 1 : n - l + r + 1, res = ask(l, r);
  return res - len + res;
}

int solve(int _n, int _k) {
  n = _n, k = _k;
  if (k & 1) k--;
  if (k == 0 || k == n) return 0;
  int cur = qry(n - k, n - 1);
  if (!cur) return n - k;
  vector<int> vis(n, 0);
  if (cur > 0) {
    vector<int> vec;
    int x = 0;
    while (!vis[x]) vec.emplace_back(x), vis[x] = 1, x = (x + k) % n;
    vec.pop_back();
    int l = 0, r = SZ(vec) - 1, res = SZ(vec);
    while (l <= r) {
      int mid = (l + r) >> 1;
      if (qry(0, (vec[mid] + k - 1) % n) < 0) res = mid, r = mid - 1;
      else l = mid + 1;
    }
    int pos = vec[res];
    assert(qry(pos, (pos + k - 1) % n) < 0);
    vec.clear();
    x = n - k;
    while (x != pos) vec.emplace_back(x), x = (x + 1) % n;
    l = 0, r = SZ(vec) - 1;
    while (l <= r) {
      int mid = (l + r) >> 1, cur = qry(vec[mid], (vec[mid] + k - 1) % n);
      if (cur == 0) return vec[mid];
      else if (cur < 0) r = mid - 1;
      else l = mid + 1;
    }
  } else {
    vector<int> vec;
    int x = 0;
    while (!vis[x]) vec.emplace_back(x), vis[x] = 1, x = (x + k) % n;
    vec.pop_back();
    int l = 0, r = SZ(vec) - 1, res = SZ(vec);
    while (l <= r) {
      int mid = (l + r) >> 1;
      if (qry(0, (vec[mid] + k - 1) % n) > 0) res = mid, r = mid - 1;
      else l = mid + 1;
    }
    int pos = vec[res];
    assert(qry(pos, (pos + k - 1) % n) > 0);
    vec.clear();
    x = n - k;
    while (x != pos) vec.emplace_back(x), x = (x + 1) % n;
    l = 0, r = SZ(vec) - 1;
    while (l <= r) {
      int mid = (l + r) >> 1, cur = qry(vec[mid], (vec[mid] + k - 1) % n);
      if (cur == 0) return vec[mid];
      else if (cur > 0) r = mid - 1;
      else l = mid + 1;
    }
  }
}

int main() {
  int n, k;
  cin >> n >> k;
  int res = solve(n, k);
  cout << res << '\n';
}

詳細信息

answer.code: In function ‘int solve(int, int)’:
answer.code:87:1: warning: control reaches end of non-void function [-Wreturn-type]
   87 | }
      | ^
/usr/bin/ld: /tmp/ccwxsFwJ.o: in function `ask(int, int)':
answer.code:(.text+0x0): multiple definition of `ask(int, int)'; /tmp/cclpdTHn.o:implementer.cpp:(.text+0x30): first defined here
/usr/bin/ld: /tmp/ccwxsFwJ.o: in function `main':
answer.code:(.text.startup+0x0): multiple definition of `main'; /tmp/cclpdTHn.o:implementer.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status