CF1153E Serval and Snake
这是一道交互题
由于只需要确定起点和终点
你选择的矩形会将整个矩形分成的两个部分
如果起点和终点在同一个部分里,那么很显然回答应该是个偶数
反之则为奇数
因此我们可以先通过
int i;
for (i = 1; i < n; i++) {
printf("? 1 1 %d %d\n", n, i);
fflush(stdout);
scanf("%d", &x);
if (x & 1) break;
}
来确定起点和终点是否在同一列
如果不在同一列(即 \(i!=n\) ),那么 \(i\) 即为起点和终点这两个点中靠左的那个点所在的列
那么同理可以找到起点和终点这两个点中靠右的那个点所在的列
如果在同一列(即 \(i==n\) ) ,那么他们肯定不会在同一行(因为起点和终点是不同的点)
那么可以用同样的方法将两个点确定在两行内
现在已经能够锁定两个点在哪两条(行或列)了
在一条中确定一个点,二分再用奇偶判断即可
这样最坏的询问次数为 \(999+1000+10+10=2019\)
正好!
#include <bits/stdc++.h>
using namespace std;
int n, x, i, j;
int ax1, ay1, ax2, ay2;
int main() {
cin >> n;
for (i = 1; i < n; i++) {
printf("? 1 1 %d %d\n", n, i);
fflush(stdout);
scanf("%d", &x);
if (x & 1) break;
}
if (i != n) {
for (j = n; j > 1; j--) {
printf("? 1 %d %d %d\n", j, n, n);
fflush(stdout);
scanf("%d", &x);
if (x & 1) break;
}
int l = 1, r = n;
while (l < r) {
int mid = (l + r + 1) >> 1;
printf("? %d %d %d %d\n", mid, i, n, i);
fflush(stdout);
scanf("%d", &x);
if (x & 1) l = mid;
else r = mid - 1;
}
ax1 = l, ay1 = i;
l = 1, r = n;
while (l < r) {
int mid = (l + r + 1) >> 1;
printf("? %d %d %d %d\n", mid, j, n, j);
fflush(stdout);
scanf("%d", &x);
if (x & 1) l = mid;
else r = mid - 1;
}
ax2 = l, ay2 = j;
} else {
for (i = 1; i < n; i++) {
printf("? 1 1 %d %d\n", i, n);
fflush(stdout);
scanf("%d", &x);
if (x & 1) break;
}
for (j = n; j > 1; j--) {
printf("? %d 1 %d %d\n", j, n, n);
fflush(stdout);
scanf("%d", &x);
if (x & 1) break;
}
int l = 1, r = n;
while (l < r) {
int mid = (l + r + 1) >> 1;
printf("? %d %d %d %d\n", i, mid, i, n);
fflush(stdout);
scanf("%d", &x);
if (x & 1) l = mid;
else r = mid - 1;
}
ax1 = i, ay1 = l;
l = 1, r = n;
while (l < r) {
int mid = (l + r + 1) >> 1;
printf("? %d %d %d %d\n", j, mid, j, n);
fflush(stdout);
scanf("%d", &x);
if (x & 1) l = mid;
else r = mid - 1;
}
ax2 = j, ay2 = l;
}
printf("! %d %d %d %d\n", ax1, ay1, ax2, ay2);
return 0;
}
CF1153E Serval and Snake的更多相关文章
- CF1153E Serval and Snake(交互题)
题目 CF1153E Serval and Snake 很有意思的一道交互题 做法 我们观察到,每次查询一行,当这一行仅包含一端是返回的答案是奇数 根据这个性质查询每一行每一列,我们大体能知道两端的位 ...
- CF1153E Serval and Snake【构造】
题目链接:洛谷 这道题是很久以前NTF跟我说的,现在想起来把它做了... 我们发现,如果蛇的两头都在矩形里或矩形外,则询问为偶数,否则为奇数. 所以我们询问每一行和每一列,就能知道蛇的两头的横纵坐标了 ...
- Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...
- Codeforces Round #551 (Div. 2) EF Solution
E. Serval and Snake 对于一个矩形,如果蛇的一条边与它相交,就意味着这条蛇从矩形内穿到矩形外,或者从矩形外穿到矩形内.所以如果某个矩形的答案为偶数,意味着蛇的头尾在矩形的同一侧(内或 ...
- 【Codeforces】Codeforces Round #551 (Div. 2)
Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...
- Codeforces Round #551 (Div. 2) A-E
A. Serval and Bus 算出每辆车会在什么时候上车, 取min即可 #include<cstdio> #include<algorithm> #include< ...
- Codeforces Round #551 (Div. 2) A~E题解
突然发现上一场没有写,那就补补吧 本来这场应该5题的,结果一念之差E fail了 A. Serval and Bus 基本数学不解释,假如你没有+1 -1真的不好意思见人了 #include<c ...
- [LeetCode] Design Snake Game 设计贪吃蛇游戏
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- Leetcode: Design Snake Game
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
随机推荐
- service docker start后docker stop/waiting的解决方法
在某次强行对机子断电后,再开机后发现docker没启动 运行service docker start显示docker start/running, process xxxx,之后不一会儿就停止了, 再 ...
- multiset的erase()操作中出现跳过元素的问题
昨天,我写了一个multiset去重,让tt指向it的后面第一个元素,若重复则删除这2个元素,并令it=tt,it++:来使it指向tt的下一个元素(我想指向原it的后面第2个元素,并认为tt的下一个 ...
- js 实现各浏览器全屏
现代浏览器包括ie11,可以直接用h5的全屏api实现 低版本的IE需要通过ActiveX插件实现: 代码实现 <!DOCTYPE html> <html> <head& ...
- Python-序列号和模块复习-64
# 序列化模块 # 数据类型转化成字符串的过程就是序列化 # 为了方便存储和网络传输 # json # dumps # loads # dump 和文件有关 # load load不能load多次 i ...
- Docker Toolbox替换默认docker machine的存储位置
使用Docker Toolbox是因为它不用打开windows的hyper-v组件,这样可以和VMware workstation一起使用. 关于如何迁移可参考:https://www.cnblogs ...
- python dlib opencv 人脸68点特征检测
不得不感慨,现在现成的东西太多了,直接拿来用就行了 dlib安装(指定版本安装,避免踩坑) pip dlib中训练好的文件http://dlib.net/files/shape_predictor_6 ...
- Andriod App类型简介
App三种类型与区别 原生应用程序:(Native App) 原生APP是什么?原生APP就是利用Android.iOS平台官方的开发语言.开发类库.工具进行开发.比如安卓的java语言,iOS的ob ...
- CMS Collector and G1 Collector
Understanding the CMS Collector CMS has three basic operations: CMS collects the young generation (s ...
- 【C/C++】Dijkstra算法的简洁实现
Dijkstra的实现有很多种,下面给出一种较为简洁和高效的实现,可以作为模板快速使用. 1. 使用邻接表存储图: 2. 使用标准STL的vector存储每个点的所有邻接边: 3. 使用pair记录当 ...
- restfull规范、DRF视图和路由
一.restfull规范的简单介绍 1.介绍 REST:表述性状态转移,是一种web交互方案 资源:在web中只要有被引用的必要都是资源 URI: URI 统一资源标识符 URL 统一资源定位符 统一 ...