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) / ...
随机推荐
- hdu 6197 array array array LIS
正反跑一次LIS,取最大的长度,如果长度大于n-k就满足条件. ac代码: #include <cstdio> #include <cstring> #include < ...
- kafka之基本介绍
什么是kafka? Kakfa起初是由LinkedIn公司开发的一个分布式的消息系统,后成为Apache的一部分,它使用Scala编写,以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理 ...
- Vs2019 C# .net core 将证书添加到受信任的根证书存储失败,出现以下错误:访问控制列表(ACL)结构无效
https://www.cnblogs.com/xiyuan/p/10632579.html 使用 vs2017 创建一个 ASP.NET Core Web 应用程序 -> Ctrl + F5 ...
- 简单标签(SimpleTag) 学习
一.由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编写和调用的SimpleTag接口 ...
- sql 添加变量
在sql语句中添加变量. declare @local_variable data_type 声明时需要指定变量的类型, 可以使用set和select对变量进行赋值, 在sql语句中就可以使用@loc ...
- C# 哥德巴赫猜想的实现方式 region分区编写
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- ajax检查用户名重复
1.获取ajax对象 new XMLHttpRequest(); IE6-8: new ActiveXOject("Microsoft.XMLHTTP"); 兼容判断:if(XML ...
- \lib\cmsis\stm32f10x.h(298): error: #67: expected a "}"
首先介绍一下csdn屏蔽广告 这个至关重要,请参考 https://blog.csdn.net/qq_40881680/article/details/82226562 更新KEIL5以后,原KEIL ...
- CentOS7安装CDH 第一章:CentOS7系统安装
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- [Selenium3+python3.6]自动化测试2-入门
参考http://www.cnblogs.com/yoyoketang/p/6123890.html #coding=utf-8 #Import webdriver time module from ...