link

题意: nnn个人围成一圈,一开始每个人都有kkk张卡片,每回合n−1n-1n−1个人会给左边⌊x2⌋\left \lfloor \frac{x}{2} \right \rfloor⌊2x​⌋,给右边⌈x2⌉\left \lceil \frac{x}{2} \right \rceil⌈2x​⌉,剩下一个人会把所有的卡片都给右边。每次询问一个位置,返回当前位置人拥有的卡片。询问不超过1000次,找到只把卡片给右边人的位置。

思路: 通过模拟可以发现,这个特殊人的卡片数量是不变的,且从他开始向右卡片数量>k>k>k的人是随着回合数增加而增加的,最后会达到一个不变的平衡。让后发现询问次数不超过1000,而1e5=314(大概)。\sqrt{1e5}=314(大概)。1e5​=314(大概)。这就提示我们可以分块来做。我们可以先让他进行n\sqrt{n}n​回合,让后我们从111开始,每次加n\sqrt{n}n​,直至当前的人的卡片>k>k>k,让后我们从这个人的位置往左走到第一个卡片数量<=k<=k<=k的位置即为我们需要求的位置,输出即可。
但是这样会有点小问题,如果我们进行n\sqrt{n}n​轮后>k>k>k的人数不足n\sqrt{n}n​怎么办呢?比如例子:n=4n=4n=4且k=2k=2k=2,特殊的人在第一个位置,这样最终>k>k>k的人为1,让后我就把每次加n\sqrt{n}n​改成了加n−1\sqrt{n}-1n​−1,这样就解决问题了。我也不会证,但是确实这样是可以过的。

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;int n,k;int query(int pos)
{printf("? %d\n",pos); fflush(stdout);int x; scanf("%d",&x);return x;
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);scanf("%d%d",&n,&k);int block=sqrt(n);for(int i=1;i<=block;i++) query(i);for(int i=1;i<=n;i+=block-1){if(query(i)>k){int pos=i-1;if(pos==0) pos=n;while(query(pos)>k){pos--;if(pos==0) pos=n;}printf("! %d\n",pos); fflush(stdout);return 0;}}return 0;
}
/**/

Codeforces Round #694 (Div. 2) E. Strange Shuffle 交互 + 思维分块相关推荐

  1. Codeforces Round #694 (Div. 2) F. Strange Housing (贪心思维)

    F. Strange Housing 题意 有 nnn 个点和 mmm 条边,对点进行染色.要求一条边的两个点不能都染色,并且删除两端都没有染色的边之后,图连通.请给出一种染色方案. 题解 暴力贪心即 ...

  2. Codeforces Round #694 (Div. 2) D. Strange Definition 质因子分解 + 平方数

    传送门 题意: 定义相邻数为lcm(x,y)gcd(x,y)\frac{lcm(x,y)}{gcd(x,y)}gcd(x,y)lcm(x,y)​是一个平方数,则xxx和yyy是相邻的.现在给出q个询问 ...

  3. Codeforces Round #610 (Div. 2) D. Enchanted Artifact 交互 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 首先我们发现如果知道了字符串的长度,我们就可以O(n+1)O(n+1)O(n+1)次询问求解出来.比如当前长度为nnn,那么我们就可以构造出一个长度为 ...

  4. (6/6) Codeforces Round #694 (Div. 2)

    (6/6) Codeforces Round #694 (Div. 2) A. Strange Partition 题意: 给一个数组,数组中的所有元素可以任意合并,求数组的每个元素除以x上去整的和, ...

  5. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  6. Codeforces Round #694 Div. 2

    Codeforces Round #694 Div. 2 CodeForces 1471A Strange Partition CodeForces 1471B Strange List CodeFo ...

  7. Codeforces Round #727 (Div. 2) F. Strange Array 线段树 + 区间合并 + 排序优化

    传送门 文章目录 题意: 思路: 题意: 给你一个长度为nnn的数组,对每个位置iii求一个最大价值,价值计算方式如下:选择一个包含iii的[l,r][l,r][l,r],让后将其拿出来排序,之后价值 ...

  8. Codeforces Round #740 (Div. 2) D2. Up the Strip dp + 分块优化 + 逆向思维

    传送门 文章目录 题意: 思路 题意: 有nnn个细胞,你初始在第nnn细胞上,假设你当前在xxx处,你每次可以进行如下两个操作: (1)(1)(1)选择[1,x−1][1,x-1][1,x−1]内一 ...

  9. Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi​,xi+1​的贡献的. 假设当前的xi=x, ...

最新文章

  1. android常用命令
  2. python进制表示方法_python 16进制表示什么
  3. module 'matplotlib' has no attribute 'verbose'
  4. :src 三目运算
  5. 【windows】编译安装ninja
  6. 为什么不用ZK来做服务发现?
  7. 评论数据获取、词频统计、词云图
  8. c语言实现图像拼接程序,opencv2实现10张图像上下左右拼接融合分享!
  9. 我的年终奖是大饼+鸡汤,and you?
  10. 这 5 条 IntelliJ IDEA 调试技巧太强了!
  11. Cannot forward after response has been committed
  12. Oracle的分区表
  13. shell基础之后台运行脚本
  14. (转)全球最神秘的高频交易巨头Jump Trading
  15. mysql使用多个索引_mysql索引合并:一条sql可以使用多个索引
  16. 爬取百度贴吧发帖信息并保存到scv文件中
  17. 二进制转十六进制 算法实现思想
  18. jav中什么是组织java程序_在Java中,开发图形用户界面的程序需要使用一个系统提供的类库,这个类库就是以下的______包。A.jav...
  19. 东鹏饮料,有点“上头”
  20. 4p营销组合策略案例_4p营销策略案例

热门文章

  1. 在中国,有这样一些村落
  2. 基于 Python 自建分布式高并发 RPC 服务
  3. excel函数中if android,在Android中阅读Excel
  4. python选择题题目_Python接口测试题(持续更新中)
  5. android的热点分配ip_Android 得到连接热点的ip的方法
  6. java 日期 区间_如何实现时间区间的分割??
  7. cocoscreator editbox 只允许数字_《Cocos Creator游戏实战》做一个数字调节框
  8. 机器学习——文件的读取
  9. leetcode84. 柱状图中最大的矩形
  10. listview在java中的使用_我的Android开发之路——ListView的使用