1 条题解
-
0
首先 只在水平或竖直方向移动是不会改变另一方向上的距离之和的,所以我们可以分别在水平方向和竖直方向上三分。
但是本题的点是离散的,所以可以直接二分。
但是直接二分的次数还是太多了,因为两次二分中加起来询问了同一个东西两次,所以我们把两个二分合到一起就行了。
询问次数 ,可以通过。
专栏文章审核结果
很遗憾,您的《题解:P6716 [CCO 2018] Gradient Descent》不符合推荐标准。原因是:lb 是什么|审核管理员:【审核不让放】,对审核结果有疑问请私信交流。
这里的 指 。
#include<iostream> int r, c, k; inline int ask(int x, int y) { std::cout << "? " << x << " " << y << std::endl; int R; std::cin >> R; return R; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(0), std::cout.tie(0); std::cin >> r >> c >> k; int l1 = 1, r1 = r, l2 = 1, r2 = c; while(l1 < r1 || l2 < r2) { int mid1 = l1 < r1 ? l1 + r1 >> 1 : 1; int mid2 = l2 < r2 ? l2 + r2 >> 1 : 1; int ret = ask(mid1, mid2); if(l1 < r1) if(ret < ask(mid1 + 1, mid2)) r1 = mid1; else l1 = mid1 + 1; if(l2 < r2) if(ret < ask(mid1, mid2 + 1)) r2 = mid2; else l2 = mid2 + 1; } int ans = ask(l1, l2); std::cout << "! " << ans << std::endl; return 0; }
- 1
信息
- ID
- 10644
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者