恶臭的交互题

  1. /*
  2. 一个结论:一个矩形将空间分割成两部分,如果开头结尾都在一个部分内,那么穿过矩形边框的线条数就是偶数,反之就是奇数
  3. 通过这个结论来进行判断
  4. 先询问999次将两个x坐标确定,方法是询问(1,X)(n,X)如果结果是奇数,那么就有个点在这里,反之没有,或者是两个点都在X上
  5. 同理询问出两个y坐标
  6. 如果结果是两个x,两个y,那么需要确定是(x1,y1)(x2,y2)还是(x1,y2)(x2,y1),这个只要单点询问一次即可
  7. 如果结果是一个x,或者一个y(不可能出现两个x都相等,或者y都相等的情况)那么需要在二分再找一次x
  8. 在其中一条线上二分找一下就行了
  9. */
  10. #include<bits/stdc++.h>
  11. using namespace std;
  12. int ask(int x1,int y1,int x2,int y2){
  13. cout<<"? "<<x1<<" "<<y1<<" "<<x2<<" "<<y2<<endl;
  14. cout.flush();
  15. int res;
  16. cin>>res;
  17. return res;
  18. cout.flush();
  19. }
  20.  
  21. int main(){
  22. int x1=,y1=,x2=,y2=;
  23. int n;cin>>n;
  24. for(int i=;i<=n;i++){
  25. int res=ask(,i,n,i);
  26. if(res%){
  27. if(y1)y2=i;
  28. else y1=i;
  29. }
  30. res=ask(i,,i,n);
  31. if(res%){
  32. if(x1)x2=i;
  33. else x1=i;
  34. }
  35. }
  36. if(x1 && y1 && x2 && y2){
  37. int res=ask(x1,y1,x1,y1);
  38. if(res%)
  39. cout<<"! "<<x1<<" "<<y1<<" "<<x2<<" "<<y2;
  40. else
  41. cout<<"! "<<x1<<" "<<y2<<" "<<x2<<" "<<y1;
  42. return ;
  43. }
  44. if(x1==){
  45. int l=,r=n,mid,ans=;
  46. while(l<=r){
  47. mid=l+r>>;
  48. if(ask(,y1,mid,y1)%)//如果[1,mid]是偶数
  49. ans=mid,r=mid-;
  50. else l=mid+;
  51. }
  52. cout<<"! "<<ans<<" "<<y1<<" "<<ans<<" "<<y2<<endl;
  53. }
  54. else if(y1==){
  55. int l=,r=n,mid,ans=;
  56. while(l<=r){
  57. mid=l+r>>;
  58. if(ask(x1,,x1,mid)%)//如果[1,mid]是偶数
  59. ans=mid,r=mid-;
  60. else l=mid+;
  61. }
  62. cout<<"! "<<x1<<" "<<ans<<" "<<x2<<" "<<ans<<endl;
  63. }
  64.  
  65. }

cf1153E 二分思维交互的更多相关文章

  1. Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)

    <题目链接> 题目大意: 有一个长度为n(n<1000)的01串,该串中至少有一个0和一个1,现在由你构造出一些01串,进行询问,然后系统会给出你构造的串与原串的   Hamming ...

  2. Atcoder Grand Contest 006 D - Median Pyramid Hard(二分+思维)

    Atcoder 题面传送门 & 洛谷题面传送门 u1s1 Atcoder 不少思维题是真的想不出来,尽管在 Atcoder 上难度并不高 二分答案(这我倒是想到了),检验最上面一层的数是否 \ ...

  3. codeforces 895B XK Segments 二分 思维

    codeforces 895B XK Segments 题目大意: 寻找符合要求的\((i,j)\)对,有:\[a_i \le a_j \] 同时存在\(k\),且\(k\)能够被\(x\)整除,\( ...

  4. Showstopper [POJ3484] [二分] [思维]

    Description 给你n个数列,问哪一个数字在所有的数列中出现了奇数次(最多一个). Sample Input 1 10 1 2 10 1 1 10 1 1 10 1 1 10 1 4 4 1 ...

  5. LightOJ 1138 Trailing Zeroes (III)(二分 + 思维)

    http://lightoj.com/volume_showproblem.php?problem=1138 Trailing Zeroes (III) Time Limit:2000MS     M ...

  6. BZOJ - 5427:最长上升子序列 (二分&思维)

    现在给你一个长度为n的整数序列,其中有一些数已经模糊不清了,现在请你任意确定这些整数的值, 使得最长上升子序列最长.(为何最长呢?因为hxy向来对自己的rp很有信心)   Input 第一行一个正整数 ...

  7. codeforces 985 D. Sand Fortress(二分+思维)

    Sand Fortress time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  8. codeforces E. Mahmoud and Ehab and the function(二分+思维)

    题目链接:http://codeforces.com/contest/862/problem/E 题解:水题显然利用前缀和考虑一下然后就是二分b的和与-ans_a最近的数(ans_a表示a的前缀和(奇 ...

  9. codeforces 814 C. An impassioned circulation of affection(二分+思维)

    题目链接:http://codeforces.com/contest/814/problem/C 题意:给出一串字符串然后q个询问,问替换掉将m个字符替换为字符c,能得到的最长的连续的字符c是多长 题 ...

随机推荐

  1. 如何搭建SVN的客户端和使用

    1.下载安装TortoiseSVN 首先我们需要从官方网站下载TortoiseSVN客户端工具 可以选择32位和64位.也可以直接使用搜索引擎搜索TortoiseSVN 也会出现直接的下载方式.这里不 ...

  2. PHP中的DateTime类

    DataTime类跟date(),strtotime(),gmdate()等函数有相同的作用,都是用来处理日期和时间的,但DateTime类更加直观.方便, 所以在PHP5.2.0以后推荐使用Date ...

  3. ABP中模块初始化过程(二)

    在上一篇介绍在StartUp类中的ConfigureService()中的AddAbp方法后我们再来重点说一说在Configure()方法中的UserAbp()方法,还是和前面的一样我们来通过代码来进 ...

  4. MD 的常用语法格式

    参考资料:MarkDown 语言常用语法 注意:vscode 中,可以使用 ctrl + shift + v 进行预览: 一.标题 一般使用 # 来进行层级标识.共 6 个层级,再多不识别. #  = ...

  5. js 图片瀑布流效果实现

    /** * Created by wwtliu on 14/9/5. */$(document).ready(function(){ $(window).on("load",fun ...

  6. bzoj3277-串

    Code #include<cstdio> #include<iostream> #include<cmath> #include<cstring> # ...

  7. HashMap底层实现原理

    HashMap底层实现 HashMap底层数据结构如下图,HashMap由“hash函数+数组+单链表”3个要素构成 通过写一个迷你版的HashMap来深刻理解 MyMap接口,定义一个接口,对外暴露 ...

  8. P4783 【模板】矩阵求逆

    原题链接 https://www.luogu.org/problemnew/show/P4783 一道模板题,更重要的省选难度..... 题目要求的是一个n*n的逆矩阵,还要对大数取膜. 普通高中生: ...

  9. MT【319】分段递推数列

    已知数列$ x_n $满足$ 0<x_1<x_2<\pi $,且\begin{equation*} x_{n+1}= \left\{ \begin{aligned}x_n+\sin ...

  10. linux服务器间文件夹拷贝

    要求,在A机器执行脚本,把A机器的某个目录文件拷贝到B机器. 第一版ftp实现: 1.A 机器先安装 ftp 客户端 $ sudo yum install ftp 2.B机器安装ftp服务端 $ su ...