Codeforces Round #551 (Div. 2) E 二分 + 交互
https://codeforces.com/contest/1153/problem/E
题意
边长为n的正方形里面有一条蛇,每次可以询问一个矩形,然后会告诉你蛇身和矩形相交有几部分,你需要在最多2019询问中知道蛇的头和尾
题解
- 假如相交奇数部分,那么头和尾一定有一个在矩形里面,假如为偶数部分,头和尾都在里面或者都不在
- 利用上述性质,对每一行进行询问即(1,1)(i,n) (999次)
- 假如存在头尾不在同一行,则对列进行两次二分就可以分别找到头和尾(2*10次)
- 假如头尾在同一行,那么就要从列开始找(999次),最后对行进行二分(2*10次)
- 最多2018次,orz...
代码
#include<bits/stdc++.h>
using namespace std;
int ask(int X1,int Y1,int X2,int Y2){
printf("? %d %d %d %d\n",X1,Y1,X2,Y2);
fflush(stdout);
int tp;
scanf("%d",&tp);
return tp;
}
int n,tp,X1,X2,Y1,Y2;
vector<int>o;
int main(){
cin>>n;
for(int i=1;i<n;i++){
tp=ask(1,1,i,n);
if(tp&1)o.push_back(i);
}
if(!o.empty()){
int l=1,r=n;
while(l<r){
int mid=(l+r)/2;
tp=ask(1,1,o.front(),mid);
if(tp%2==0)l=mid+1;
else r=mid;
}
Y1=l;
l=1;r=n;
while(l<r){
int mid=(l+r)/2;
tp=ask(o.back()+1,1,n,mid);
if(tp%2==0)l=mid+1;
else r=mid;
}
Y2=l;
printf("! %d %d %d %d\n",o.front(),Y1,o.back()+1,Y2);
}else{
for(int i=1;i<n;i++){
tp=ask(1,1,n,i);
if(tp&1)o.push_back(i);
}
int l=1,r=n;
while(l<r){
int mid=(l+r)/2;
tp=ask(1,1,mid,o.front());
if(tp%2==0)l=mid+1;
else r=mid;
}
X1=l;
l=1;r=n;
while(l<r){
int mid=(l+r)/2;
tp=ask(1,o.back()+1,mid,n);
if(tp%2==0)l=mid+1;
else r=mid;
}
X2=l;
printf("! %d %d %d %d\n",X1,o.front(),X2,o.back()+1);
}
}
Codeforces Round #551 (Div. 2) E 二分 + 交互的更多相关文章
- 【Codeforces】Codeforces Round #551 (Div. 2)
Codeforces Round #551 (Div. 2) 算是放弃颓废决定好好打比赛好好刷题的开始吧 A. Serval and Bus 处理每个巴士最早到站且大于t的时间 #include &l ...
- Codeforces Round #404 (Div. 2) C 二分查找
Codeforces Round #404 (Div. 2) 题意:对于 n and m (1 ≤ n, m ≤ 10^18) 找到 1) [n<= m] cout<<n; 2) ...
- Codeforces Round #499 (Div. 2) D. Rocket_交互题_二分
第一次作交互题,有点不习惯. 由于序列是循环的,我们可以将一半的机会用于判断当前是否是在说谎,另一半的机会用于二分的判断. 对于判断是否实在说谎,用1判断即可.因为不可能有比1还小的数. 本题虽然非常 ...
- Codeforces Round #551 (Div. 2) E. Serval and Snake (交互题)
人生第一次交互题ac! 其实比较水 容易发现如果查询的矩阵里面包含一个端点,得到的值是奇数:否则是偶数. 所以只要花2*n次查询每一行和每一列,找出其中查询答案为奇数的行和列,就表示这一行有一个端点. ...
- Codeforces Round #551 (Div. 2) 题解
CF1153A 直接做啊,分类讨论即可 #include<iostream> #include<string.h> #include<string> #includ ...
- Codeforces Round #324 (Div. 2) C (二分)
题目链接:http://codeforces.com/contest/734/problem/C 题意: 玩一个游戏,一开始升一级需要t秒时间,现在有a, b两种魔法,两种魔法分别有m1, m2种效果 ...
- Codeforces Round #377 (Div. 2)D(二分)
题目链接:http://codeforces.com/contest/732/problem/D 题意: 在m天中要考k个课程, 数组a中有m个元素,表示第a[i]表示第i天可以进行哪门考试,若a[i ...
- Codeforces Round #350 (Div. 2) D2 二分
五一期间和然然打的团队赛..那时候用然然的号打一场掉一场...七出四..D1是个数据规模较小的题 写了一个暴力过了 面对数据如此大的D2无可奈何 现在回来看 一下子就知道解法了 二分就可以 二分能做多 ...
- Codeforces Round #551 (Div. 2) EF Solution
E. Serval and Snake 对于一个矩形,如果蛇的一条边与它相交,就意味着这条蛇从矩形内穿到矩形外,或者从矩形外穿到矩形内.所以如果某个矩形的答案为偶数,意味着蛇的头尾在矩形的同一侧(内或 ...
随机推荐
- Python 生成器 (generator) & 迭代器 (iterator)
python 生成器 & 迭代器 生成器 (generator) 列表生成式 列表生成式用来生成一个列表,虽然写的是表达式,但是储存的是计算出来的结果,因此生成的列表受到内存大小的限制 示例: ...
- 解决问题:Red Hat Enterprise Linux 7 64 位 虚拟机安装后无法启动图形化
原因: 1.系统在创建时,没有安装图形化 2.系统在安装后,有降低内存的操作,内存过低无法启动桌面,以及其他 就原因一进行图形化安装: 1.VMware挂载Red Hat Enterprise Lin ...
- CF582E Boolean Function(DP,状态压缩,FMT)
简单题. 我第二道自己做出来的 2900 没毛病,我没切过 2800 的题 lqy:"CF 评分 2800 是中等难度" 我活个啥劲啊 为了方便(同时压缩状态个数),先建出表达式树 ...
- 第04组 Beta冲刺(2/5)
队名:new game 组长博客 作业博客 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 验收游戏素材 学习Unity 2D Animation系统 基本做完了人物的各个动画 接下来的计划 冲击E ...
- Batchnorm原理详解
Batchnorm原理详解 前言:Batchnorm是深度网络中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法,可以说是目前深度网络必不可少的一部分. 本文旨在用通俗易懂的语言,对深度学习的常 ...
- python3编码问题总结
关于python3的编码类型,到底是怎么编码的,一直使我比较疑惑,在看了网上很多帖子之后,经过自己尝试与实验,将自己的总结写在下面,一是当做一次笔记,二是希望网友们能指正.仅供参考,欢迎指正,谢谢!! ...
- wpf button style IsMouseOver
<Style x:Key="workButtonStyle" TargetType="{x:Type Button}"> <Style.Tri ...
- sql server pivot
SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[YearSalary]( [year] [int] NULL, ...
- 练手WPF(三)——扫雷小游戏的简易实现(上)
一.创建项目1.创建WPF项目,设置初始化窗口大小(初级难度):高x宽为430x350.2.添加文件夹Images,并添加相关图片. 3.xaml中引入图片资源. <Window.Resourc ...
- 微信网站登录doem
直接上代码 namespace CloudPrj.WeiXin { public partial class index : System.Web.UI.Page { ...