CF1153E Serval and Snake【构造】
题目链接:洛谷
这道题是很久以前NTF跟我说的,现在想起来把它做了。。。
我们发现,如果蛇的两头都在矩形里或矩形外,则询问为偶数,否则为奇数。
所以我们询问每一行和每一列,就能知道蛇的两头的横纵坐标了。
但是有一种情况不行,那就是两头在同一行或列上(以下只考虑同一行的),但是它们一定不在同一列,所以可以找到它们所在的列,然后通过二分找出它们所在的行。
具体实现可以看代码。
#include<bits/stdc++.h>
#define Rint register int
using namespace std;
inline int read(){
int ch = getchar(), res = ;
while(ch < '' || ch > '') ch = getchar();
while(ch >= '' && ch <= ''){
res = res * + ch - '';
ch = getchar();
}
return res;
}
int n, cnt;
pair<int, int> res[];
inline int query(int a1, int b1, int a2, int b2){
printf("? %d %d %d %d\n", a1, b1, a2, b2);
fflush(stdout);
return read() & ;
}
inline int solve1(int x){
int l = , r = n, mid;
while(l < r){
mid = l + r >> ;
if(query(x, l, x, mid)) r = mid;
else l = mid + ;
}
return l;
}
inline int solve2(int x){
int l = , r = n, mid;
while(l < r){
mid = l + r >> ;
if(query(l, x, mid, x)) r = mid;
else l = mid + ;
}
return l;
}
int main(){
n = read();
for(Rint i = ;i <= n;i ++)
if(query(i, , i, n)) res[cnt ++] = make_pair(i, solve1(i));
if(!cnt){
for(Rint i = ;i <= n;i ++)
if(query(, i, n, i)){
if(!cnt) res[cnt ++] = make_pair(solve2(i), i);
else res[cnt ++] = make_pair(res[].first, i);
}
}
printf("! %d %d %d %d\n", res[].first, res[].second, res[].first, res[].second);
fflush(stdout);
}
CF1153E
CF1153E Serval and Snake【构造】的更多相关文章
- CF1153E Serval and Snake
题目地址:CF1153E Serval and Snake 这是一道交互题 由于只需要确定起点和终点 你选择的矩形会将整个矩形分成的两个部分 如果起点和终点在同一个部分里,那么很显然回答应该是个偶数 ...
- CF1153E Serval and Snake(交互题)
题目 CF1153E Serval and Snake 很有意思的一道交互题 做法 我们观察到,每次查询一行,当这一行仅包含一端是返回的答案是奇数 根据这个性质查询每一行每一列,我们大体能知道两端的位 ...
- Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...
- Codeforces Round #551 (Div. 2) A-E
A. Serval and Bus 算出每辆车会在什么时候上车, 取min即可 #include<cstdio> #include<algorithm> #include< ...
- 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题解
突然发现上一场没有写,那就补补吧 本来这场应该5题的,结果一念之差E fail了 A. Serval and Bus 基本数学不解释,假如你没有+1 -1真的不好意思见人了 #include<c ...
- UVALive 7269 Snake Carpet (构造)
题目:传送门. 题意:构造出一个矩阵,使得矩阵含有n条蛇,每条蛇的长度是1到n,并且奇数长度的蛇有奇数个拐弯,偶数长度 的蛇有偶数个拐弯. 奇数和偶数分开构造,奇数可以是: 1357 3357 555 ...
- 构造 hihocoder 1257 Snake Carpet (15北京I)
题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...
随机推荐
- Visual Studio 开发大量 JavaScript 代码项目程序崩溃的解决方案
最近公司做新项目,基于 Bootstrap.AngularJS 和 kendo 开发一套后台的管理系统,在项目中使用了大量的 JavaScript 文件,这两天 Visual Studio 2015 ...
- .netcore 和.netFrameWork
netcore 是一个流程,可以调用,netcore 框架下,选择netFrameWork.可以使用netFrameWork的库,比如画图等.只是管道是netcore的.
- HelenOS
HelenOS 来源 http://www.helenos.org/ 关于HELENOS HelenOS是一种基于便携式微内核的多服务器操作系统,从头开始设计和实现.它将关键操作系统功能(如文件系统, ...
- Python TCP通信之仿文件下载
TCP_文件下载_Client.py import socket def main(): # 创建TCP套接字 tcp_socket = socket.socket(socket.AF_INET, s ...
- leetcode-64. 最小路径和 · vector + DP
题面 Given a m x n grid filled with non-negative numbers, find a path from top left to bottom right wh ...
- apidoc 工具的使用
使用rest framerok时,需要写API接口文档,此时就需要用到 apidoc(个人觉得这个用的比较顺手) 需要安装nodejs,,, windows 下 1 然后验证是否安装成功 node ...
- linux在线安装jdk,tomcat,Nginx
安装jdk yum search java 查看java的所有版本内容 yum install -y java版本 -openjdk 安装成功 安装tomcat yum search tomcat y ...
- k2系列-开发篇
上一篇讲到K2安装的具体操作,本篇我们具体讲一下在VS环境下如何开发K2工作流. 常用工具控件说明: 节点关联线:流程各节点之间的关联线 客户端节点:流程的基本元素 服务器端节点:流程的完成标识节点 ...
- ndk学习之C语言基础复习----指针、函数、预处理器
指针: 指针乃C.C++的灵魂之所在,所以有必要好好的复习复习.什么是指针?一句话来概括:“指针是一个变量,它的值是一个地址.”,其中指针变量的声明有如下三种形式: 其中第一种是被推荐的写法. 其中还 ...
- Windows服务 System.ServiceProcess.ServiceBase类
一.Windows服务 1.Windows服务应用程序是一种需要长期运行的应用程序,它适合服务器环境. 2.无用户界面,任何消息都会写进Windows事件日志. 3.随计算机启动而启动,不需要用户一定 ...