目录
一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
1063C - Dwarves, Hats and Extrasensory Abilities
二、解题报告
1、思路分析
看到 30 和 1E9就往二分上想
我们考虑开局往左下角或者右下角中的一个位置放一个,这里不妨放右上角即(1e9, 1e9)
然后开始二分来构造
lo = 0, hi = 1e9
二分x = (lo + hi) / 2
如果 color(x, x) == col(hi, hi) 那么收缩 hi = x
否则收缩lo = x
这样保证左下右上一定不同
最终输出 (lo, hi) (hi, lo) 即正方形的主对角线
2、复杂度
时间复杂度: O(log U)空间复杂度:O(1)
3、代码详解
#include <bits/stdc++.h>
// #include <ranges>
using u32 = unsigned;
using i64 = long long;
using u64 = unsigned long long;
constexpr int P = 998244353;
constexpr int inf32 = 1E9 + 7;
int query(int x, int y) {
std::cout << x << ' ' << y << std::endl;
std::string res;
std::cin >> res;
return res[0] == 'w';
}
void solve() {
int n;
std::cin >> n;
int lo = 0, hi = 1'000'000'000;
int chi = query(hi, hi);
-- n;
while(n --) {
int x = lo + hi >> 1;
int c = query(x, x);
if (c == chi) hi = x;
else lo = x;
}
std::cout << lo << ' ' << hi << ' ' << hi << ' ' << lo << std::endl;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
int t = 1;
// std::cin >> t;
while (t--) {
solve();
}
return 0;
}