题目链接:洛谷

这道题是很久以前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【构造】的更多相关文章

  1. CF1153E Serval and Snake

    题目地址:CF1153E Serval and Snake 这是一道交互题 由于只需要确定起点和终点 你选择的矩形会将整个矩形分成的两个部分 如果起点和终点在同一个部分里,那么很显然回答应该是个偶数 ...

  2. CF1153E Serval and Snake(交互题)

    题目 CF1153E Serval and Snake 很有意思的一道交互题 做法 我们观察到,每次查询一行,当这一行仅包含一端是返回的答案是奇数 根据这个性质查询每一行每一列,我们大体能知道两端的位 ...

  3. Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)

    人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...

  4. Codeforces Round #551 (Div. 2) A-E

    A. Serval and Bus 算出每辆车会在什么时候上车, 取min即可 #include<cstdio> #include<algorithm> #include< ...

  5. Codeforces Round #551 (Div. 2) EF Solution

    E. Serval and Snake 对于一个矩形,如果蛇的一条边与它相交,就意味着这条蛇从矩形内穿到矩形外,或者从矩形外穿到矩形内.所以如果某个矩形的答案为偶数,意味着蛇的头尾在矩形的同一侧(内或 ...

  6. 【Codeforces】Codeforces Round #551 (Div. 2)

    Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...

  7. Codeforces Round #551 (Div. 2) A~E题解

    突然发现上一场没有写,那就补补吧 本来这场应该5题的,结果一念之差E fail了 A. Serval and Bus 基本数学不解释,假如你没有+1 -1真的不好意思见人了 #include<c ...

  8. UVALive 7269 Snake Carpet (构造)

    题目:传送门. 题意:构造出一个矩阵,使得矩阵含有n条蛇,每条蛇的长度是1到n,并且奇数长度的蛇有奇数个拐弯,偶数长度 的蛇有偶数个拐弯. 奇数和偶数分开构造,奇数可以是: 1357 3357 555 ...

  9. 构造 hihocoder 1257 Snake Carpet (15北京I)

    题目传送门 题意:贪吃蛇,要求长度奇数的蛇转弯次数为正奇数,长度偶数转弯次数为正偶数,且组成矩形.(北大出的题咋都和矩形相关!!!) 分析:构造找规律,想到就简单了.可以构造 宽:(n + 1) / ...

随机推荐

  1. 2019杭电多校一 A. Blank (dp)

    大意: 长为$n$的数组, 每个位置范围$[0,3]$, $m$个限制$(l,r,x)$表示$[l,r]$内有$x$种数, 求方案数. 维护每个数字最后一次出现位置, 暴力$DP$ 实现时有个技巧是把 ...

  2. Unity场景间数据传递方法

    在游戏开发中,会常用到场景间传递数据的方法(比如关卡选择,过关后自动回到关卡选择界面,以动画方式解锁下一关),目前研究了三种: 1. 使用DontDestroyOnLoad方法: (1)在场景A中做个 ...

  3. JAVA文件IO总结

    文件流的操作有两种:字节流.字符流 字节流:FileInputStream,FileInputStream 字符流:InputStreamReader,OutputStreamReader 这两种流对 ...

  4. 关于MQ的几件小事(六)消息积压在消息队列里怎么办

    1.大量消息在mq里积压了几个小时了还没解决 场景:几千万条数据在MQ里积压了七八个小时,从下午4点多,积压到了晚上很晚,10点多,11点多.线上故障了,这个时候要不然就是修复consumer的问题, ...

  5. 安装theano踩过的坑(gpu)

    参考 http://deeplearning.net/software/theano/install.html TensorFlow出了点问题 python3.7的环境 pip安装 keras已经安装 ...

  6. bootstrap 分页行数选择按钮失效

    原因是bootstrap.js重复加载,button点击作用两次,导致没效果

  7. 4.解析配置文件 redis.conf

    将原始的redis.conf拷贝,得到一个myRedis.conf文件,修改配置文件时,就修改这个文件,不对原始的配置文件进行修改 redis配置文件中主要有以下内容: 1.units单位 a)配置大 ...

  8. 【Struts2】Json插件使用

    一.使用步骤 1.1 引入依赖 1.2 在struts.xml文件中配置 一.使用步骤 1.1 引入依赖 <!-- https://mvnrepository.com/artifact/org. ...

  9. linux设置密钥登录(只允许密钥登录)

    一.root用户使用这条命令看看家目录有没有(.ssh文件夹),cd .ssh,如果存在就会进入这个文件夹,不存在就(makedir .ssh),修改.ssh这个文件夹权限(chmod 700 .ss ...

  10. 阿里P7浅谈Java的Spring Bean

    1.简单java 类,实现 Serializable 接口 package com.curtis.bean;import java.io.Serializable;@SuppressWarnings( ...