結果
問題 | No.2753 鳩の巣原理 |
ユーザー |
![]() |
提出日時 | 2024-05-10 22:13:02 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,721 bytes |
コンパイル時間 | 2,059 ms |
コンパイル使用メモリ | 202,068 KB |
最終ジャッジ日時 | 2025-02-21 12:51:31 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 16 WA * 14 |
ソースコード
#include <bits/stdc++.h>using namespace std;void fast_io() {ios::sync_with_stdio(false);std::cin.tie(nullptr);}bool debug = false;vector<int> cnt;int query(int x) {cout << "? " << x << endl;if (debug) {return cnt[x - 1];} else {int c;cin >> c;return c;}}int main() {fast_io();int t = (debug ? 100 : 1);for (; t--;) {int n;if (debug) {n = 100;} else {cin >> n;}if (debug) {cnt.resize(n);uniform_int_distribution<int> dist(1, n - 1);random_device rd;mt19937 mt(rd());for (int i = 0; i < n; i++) {cnt[i] = dist(mt);}sort(cnt.begin(), cnt.end());}int l = 1, r = n;int lcnt = query(l);int rcnt = query(r);//[l, r]に同じ値が含まれるfor (int i = 0; i < 8; i++) {if (l + 1 == r) {int c = query(l);continue;}int mid = (l + r) / 2;int c = query(mid);if (c - lcnt < mid - l) {r = mid;rcnt = c;} else {l = mid;lcnt = c;}assert(rcnt - lcnt < r - l);}cout << "Yes " << l << " " << r << endl;if (debug) {if (cnt[l - 1] != cnt[r - 1]) {for (int i = 0; i < n; i++) {cout << cnt[i] << " ";}cout << endl;assert(cnt[l - 1] == cnt[r - 1]);}}}}