题目:戳这里

题意:一个点在[1,n]以内,我们可以进行4500次查询,每次查询之后,该点会向左或向右移动0~k步,请在4500次查询以内找到该点。

解题思路:一边二分,一边随机。

交互题似乎有好多是二分,上次交互题的二分调了好久,这次也是。我出数据水平又很低,所以至今不知道哪些数据可以卡哪些二分的写法,只能改一次交一次。。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <string>
 5 #include <vector>
 6 #include <map>
 7 #include <cmath>
 8 #include <iostream>
 9 #include <random>
10 #include <ctime>
11 using namespace std;
12 typedef long long ll;
13 const int maxn = 1e6 + 10;
14 char ans[11];
15 bool ask(ll l, ll r)
16 {
17     //printf("$$$$");
18     printf("%lld %lld\n", l, r);
19     fflush(stdout);
20     scanf("%s", ans);
21     if(ans[0] == 'Y')
22     {
23         if(l == r) exit(0);
24         else return 1;
25     }
26     else return 0;
27 }
28 int na[maxn];
29 int main()
30 {
31     ll n, k;
32     srand(time(NULL));
33     scanf("%lld %lld", &n, &k);
34     ll l = 1, r = n;
35     while(l <= r)
36     {
37         ll mid = l + (r - l) / 2;
38         if(ask(l, mid))
39         {
40             r = mid;//注意这点,我的理解是mid可能就是我们要找的点,如果用常规写法r=mid-1会把这个点跳过去
41             //但我试了几个样例,发现在区间不断变化且有随机数的情况下,及时r=mid-1也能找到答案。。
42         }
43         else
44         {
45             l = mid + 1;
46         }
47             l = max(1ll, l - k);
48             r = min(n, r + k);
49             mid = l + rand()%(r - l + 1);
50             ask(mid, mid);
51             l = max(1ll, l - k);
52             r = min(n, r + k);
53     }
54     return 0;
55 }

View Code

转载于:https://www.cnblogs.com/zmin/p/9606685.html

codeforces 1039B Subway Pursuit【二分+随机】相关推荐

  1. Codeforces 685C Optimal Point (二分、不同类型距离的相互转换)

    题目链接 https://codeforces.com/contest/685/problem/C 题解 我怎么又还差最后一步的时候放弃了然后往别的方向上想了一小时才发现这个思路能做-- 首先二分答案 ...

  2. CodeForces - 1538G Gift Set(二分)

    题目链接:点击查看 题目大意:给出 a,b,x,ya,b,x,ya,b,x,y,分别表示有 aaa 个蓝色糖果和 bbb 和红色糖果,现在有两种打包方式: xxx 个蓝色糖果和 yyy 个红色糖果 y ...

  3. Success Rate CodeForces - 807C (数学+二分)

    You are an experienced Codeforces user. Today you found out that during your activity on Codeforces ...

  4. Codeforces - 706B - Interesting drink - 二分 - 简单dp

    https://codeforces.com/problemset/problem/706/B 因为没有看见 $x_i$ 的上限是 $10^5$ ,就用了二分去做,实际上这道题因为可乐的价格上限是 $ ...

  5. codeforces数学1700[CodeForces 1336B[分类讨论+二分]CodeForces - 1301C[组合计数的减法原理]]

    CodeForces 1336B Xenia and Colorful Gems 题目大意:给你nrn_rnr​个xix_ixi​,ngn_gng​个yiy_iyi​,nbn_bnb​个ziz_izi ...

  6. 2018.12.08 codeforces 939E. Maximize!(二分答案)

    传送门 二分答案好题. 题意简述:要求支持动态在一个数列队尾加入一个新的数(保证数列单增),查询所有子数列的 最大值减平均值 的最大值. 然而网上一堆高人是用三分做的. 我们先考虑当前的答案有可能由什 ...

  7. CodeForces - 1486D Max Median(二分+最长连续子段和)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的数列,现在从长度至少为 kkk 的连续子段中,找到最大的中位数 题目分析:做过平均数的模型:POJ - 2018 Best Cow Fences ...

  8. CodeForces - 507E Breaking Good(二分+贪心)

    题目链接:点击查看 题目大意:给出 n 个竹子,初始时高度为 h[ i ],接下来每一天每个竹子都会长高 a[ i ] 个单位的高度,每一天可以砍 k 次竹子(可以是同一个),每次可以砍掉 p 个单位 ...

  9. CodeForces - 1373F Network Coverage(二分)

    题目链接:点击查看 题目大意:给出一个首尾相接的环,每个点的编号分别为 1 ~ n ,其中每个点的需求量记为 a[ i ] ,供应量记为 b[ i ] ,每个点可以用 b[ i ] 向 a[ i ] ...

最新文章

  1. 各种抠图动态图片_学习抠取动物毛发图片的PS抠图技巧
  2. SANS:2014年安全分析与安全智能调研报告
  3. MultiRow发现之旅(二)- 详解属性管理器
  4. python批量ping50台服务器_使用python编写批量ping主机脚本
  5. java空间租用_java影片租赁平台
  6. 谷歌技术三宝之BigTable
  7. android java json与实体互相转换工具
  8. Springboot中常用的文件上传和下载通用接口
  9. live555 分析—— OpenRtsp
  10. vue 移动端选择器
  11. Luogu4366[CodePlus#4] 最短路
  12. ansys模型导入matlab,ANSYS导入MATLAB
  13. 三阶龙格库塔matlab,三阶、四阶龙格库塔函数matlab代码
  14. 巴菲特致股东的一封信:1999年
  15. Java同步锁对比synchronized 和ReentrantLock 的区别--超级详细权威
  16. 元素的隐藏和显示(v-show指令)
  17. kjb文件 解析_Python 之父再发文:构建一个 PEG 解析器
  18. 未来计算机将朝着微型化成,湖北汽车工业学院大学计算机基础复习题(费劲整理的,带答案,考试命中概率很大)....
  19. 编译原理复习(4)语法分析--自上而下分析
  20. 训练集、验证集以及测试集的区别

热门文章

  1. mysql infile local,MySQL:启用LOAD DATA LOCAL INFILE
  2. vue取通过key取value_如何通过获取map中的key来获得与key对应的value值,进行运算...
  3. OpenCV Mat基础认知感
  4. JVM007_运行时栈帧结构
  5. 一篇博客读懂设计模式之---动态代理与反射
  6. 信息学奥赛课课通VS中学生计算机,数学奥赛VS信息学奥赛 孩子们该如何选择
  7. Java中implies_boolean implies(Permission p)
  8. 基于java SSM校园兼职平台系统设计和实现
  9. oracle 怎么 制造崩溃,oracle数据库崩溃
  10. jsoup 简单应用