基本思路就是二分 每条边分别二分求
c++11 用fflush(sdtout) 不行 囧啊

#include<bits/stdc++.h>
using namespace std; int ans[2][4];
int inp;
int check(int x1,int y1,int x2,int y2) {
printf("? %d %d %d %d\n",x1,y1,x2,y2);
fflush(stdout);
scanf("%d",&inp);
return inp;
}
int has(int x1,int y1,int x2,int y2) {
if(x1 <= ans[0][0] && y1 <= ans[0][1] && x2 >= ans[0][2] && y2 >= ans[0][3]) return 1;
return 0;
}
void solve(int x1,int y1,int x2,int y2,int flag){
int l=x1, r=x2;
while(l<=r){
int mid = (l+r)>>1;
int num = check(mid,y1,x2,y2);
if(flag && has(mid,y1,x2,y2) ) num--;
if(num==1 || num==2)
ans[flag][0] = mid, l = mid+1;
else
r = mid-1;
}
x1 = ans[flag][0];
// printf("x1:%d\n",x1); l=x1,r=x2;
while(l<=r){
int mid = (l+r)>>1;
int num = check(x1,y1,mid,y2);
if( flag && has(x1,y1,mid,y2) ) num--;
if(num==1 || num==2)
ans[flag][2]=mid, r = mid-1;
else
l = mid+1;
}
x2 = ans[flag][2];
// printf("x2;%d\n",x2); l=y1,r=y2;
while(l<=r){
int mid = (l+r)>>1;
int num = check(x1,mid,x2,y2);
if(flag && has(x1,mid,x2,y2) ) num--;
if(num==1 || num==2)
ans[flag][1]=mid, l = mid+1;
else
r=mid-1;
}
y1 = ans[flag][1];
// printf("y1:%d\n",y1); l=y1,r=y2;
while(l<=r){
int mid = (l+r)>>1;
int num = check(x1,y1,x2,mid);
if(flag && has(x1,y1,x2,mid) ) num--;
if(num==1 || num==2)
ans[flag][3]=mid, r=mid-1;
else
l=mid+1;
}
y2 = ans[flag][3];
// printf("y2:%d\n",y2);
} int main(){
int n;
while(~scanf("%d",&n)) {
solve(1,1,n,n,0);
solve(1,1,n,n,1); printf("!");
for(int i = 0; i < 2; ++i) {
for(int j = 0; j < 4; ++j) {
printf(" %d",ans[i][j]);
}
}printf("\n"); fflush(stdout);
}
return 0;
}

CF371 D Searching Rectangles的更多相关文章

  1. codeforces 713B B. Searching Rectangles(二分)

    题目链接: B. Searching Rectangles time limit per test 1 second memory limit per test 256 megabytes input ...

  2. Codeforces Round #371 (Div. 2) D. Searching Rectangles 交互题 二分

    D. Searching Rectangles 题目连接: http://codeforces.com/contest/714/problem/D Description Filya just lea ...

  3. Codeforces.714D.Searching Rectangles(交互 二分)

    题目链接 \(Description\) 在一个\(n*n\)的二维平面中有两个不相交的整点矩形,每次可以询问两个矩形有几个完全在你给出的一个矩形中.200次询问内确定两个矩形坐标. \(Soluti ...

  4. poj-1314 Finding Rectangles

    题目地址: http://poj.org/problem?id=1314 题意: 给出一串的点,有些点可以构成正方形,请按照字符排序输出. 因为这道题的用处很大, 最近接触的cv 中的Rectangl ...

  5. [ACM_暴力][ACM_几何] ZOJ 1426 Counting Rectangles (水平竖直线段组成的矩形个数,暴力)

    Description We are given a figure consisting of only horizontal and vertical line segments. Our goal ...

  6. Codeforces Round #236 (Div. 2) C. Searching for Graph(水构造)

    题目大意 我们说一个无向图是 p-interesting 当且仅当这个无向图满足如下条件: 1. 该图恰有 2 * n + p 条边 2. 该图没有自环和重边 3. 该图的任意一个包含 k 个节点的子 ...

  7. STL --- UVA 123 Searching Quickly

    UVA - 123 Searching Quickly Problem's Link:   http://acm.hust.edu.cn/vjudge/problem/viewProblem.acti ...

  8. Searching External Data in SharePoint 2010 Using Business Connectivity Services

    from:http://blogs.msdn.com/b/ericwhite/archive/2010/04/28/searching-external-data-in-sharepoint-2010 ...

  9. 构造图 Codeforces Round #236 (Div. 2) C. Searching for Graph

    题目地址 /* 题意:要你构造一个有2n+p条边的图,使得,每一个含k个结点子图中,最多有2*k+p条边 水得可以啊,每个点向另外的点连通,只要不和自己连,不重边就可以,正好2*n+p就结束:) */ ...

随机推荐

  1. Oracle RAC基本概念

    原文链接:http://tech.it168.com/a2012/0814/1384/000001384756_all.shtml 不同的集群产品都有自己的特点,RAC的特点包括如下几点: ·双机并行 ...

  2. JDBC为什么要使用PreparedStatement而不是Statement

    PreparedStatement是什么? PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatemen ...

  3. bzoj 4033: [HAOI2015]树上染色 [树形DP]

    4033: [HAOI2015]树上染色 我写的可是\(O(n^2)\)的树形背包! 注意j倒着枚举,而k要正着枚举,因为k可能从0开始,会使用自己更新一次 #include <iostream ...

  4. oneNote总结

    22.添加附加文件删除后,文件大小没有发生改变的(优化文件和清空回收站)

  5. 《第一行代码 android》 读书笔记:找出当前界面对应的Activity

    在android开发中找出当前界面对应的Activity,步骤如下: 新建一个BaseActivity继承自Activity,然后在BaseActivity中重写onCreate()方法,通过getC ...

  6. php语言基础(一)

    一.php标记风格 1.1xml风格(常用) <?php echo "xml风格": ?> 1.2脚本风格 <script language="php& ...

  7. redis —主从&&集群(CLUSTER)

    REDIS主从配置 为了节省资源,本实验在一台机器进行.即,在一台机器上启动两个端口,模拟两台机器. 机器准备: [root@adailinux ~]# cp /etc/redis.conf /etc ...

  8. 洛谷P1896 [SCOI2005]互不侵犯King【状压DP】

    题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共8个格子. 输入格式: 只有一行,包含两个数N,K ...

  9. 回归模型效果评估系列1-QQ图

    (erbqi)导语 QQ图全称 Quantile-Quantile图,也就是分位数-分位数图,简单理解就是把两个分布相同分位数的值,构成点(x,y)绘图:如果两个分布很接近,那个点(x,y)会分布在y ...

  10. JMS学习(一):初识JMS

    1.为什么使用JMS(java消息中间件)java message service 为了解决一个系统对服务调用进行解耦(在一个系统需要调用多个服务的时候,需要通过中间件来进行消息进行交流) 2.AMQ ...