zoukankan      html  css  js  c++  java
  • codeforces 1039B Subway Pursuit【二分+随机】

    题目:戳这里

    题意:一个点在[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
    ", 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
  • 相关阅读:
    重写保存按钮save事件
    隐藏列获取不到值,表格选中行提示未选中
    前后台获取上下文context
    editGrid分录表格
    通用查询-高级查询
    js保留位和取整
    在Visual Studio中使用C++创建和使用DLL
    Lua中的一些库(1)
    Lua中的面向对象编程
    Lua中的模块与包
  • 原文地址:https://www.cnblogs.com/zmin/p/9606685.html
Copyright © 2011-2022 走看看