[cf1491F]Magnets
首先,只需要找到一个有磁性的位置,就可以通过$n-1$次判断其余磁铁是否有磁性,因此也就是要在$\lfloor\log_{2}n\rfloor+1$次中找到一个有磁性的位置
有一个$n-1$次的做法,即暴力枚举第$i$个磁铁($i\ge 2$),将1到$i-1$的磁铁放在左侧,那么一定能找到第2个有磁性的磁铁,由于总存在两个,即可以找到
事实上,找磁铁已经无法优化了,但找磁铁的过程却可以带来额外的信息:假设第一个磁铁位于$i$,$i$之前恰好存在一个磁铁,对$i$之前的部分二分即可
更精确的来说,首先用了$i-1$次找到了$i$这个位置,再用$n-i$次可以确定$i$之后的部分,对于$i$之前的部分仅用$\lceil\log_{2}i-1\rceil$次,共计即$n-1+\lceil\log_{2}n\rceil\le n+\lfloor\log_{2}n\rfloor$

1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 2005
4 vector<int>v;
5 int t,n,ans,vis[N];
6 int main(){
7 scanf("%d",&t);
8 while (t--){
9 scanf("%d",&n);
10 for(int i=1;i<=n;i++)vis[i]=0;
11 v.clear();
12 for(int i=2;i<=n;i++){
13 printf("? %d 1\n",i-1);
14 for(int j=1;j<i;j++)printf("%d ",j);
15 printf("\n%d\n",i);
16 fflush(stdout);
17 scanf("%d",&ans);
18 if (ans){
19 vis[i]=1;
20 for(int j=i+1;j<=n;j++){
21 printf("? 1 1\n%d\n%d\n",i,j);
22 fflush(stdout);
23 scanf("%d",&ans);
24 if (ans)vis[j]=1;
25 }
26 int l=1,r=i-1;
27 while (l<r){
28 int mid=(l+r>>1);
29 printf("? %d 1\n",mid-l+1);
30 for(int j=l;j<=mid;j++)printf("%d ",j);
31 printf("\n%d\n",i);
32 fflush(stdout);
33 scanf("%d",&ans);
34 if (ans)r=mid;
35 else l=mid+1;
36 }
37 vis[l]=1;
38 break;
39 }
40 }
41 for(int i=1;i<=n;i++)
42 if (!vis[i])v.push_back(i);
43 printf("! %d ",v.size());
44 for(int i=0;i<v.size();i++)printf("%d ",v[i]);
45 printf("\n");
46 fflush(stdout);
47 }
48 }
[cf1491F]Magnets的更多相关文章
- Codeforces Round #330 (Div. 1) C. Edo and Magnets 暴力
C. Edo and Magnets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/594/pr ...
- B - Magnets
Problem description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't ...
- CodeForces - 344A Magnets (模拟题)
CodeForces - 344A id=46664" style="color:blue; text-decoration:none">Magnets Time ...
- Codeforces 344A Magnets
Description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't need dom ...
- Codeforces 1345 D - Monopole Magnets
传送门:D. Monopole Magnets 这一场也是很神奇了,先是推迟三天,后是评测鸡崩了,unrated... 题意:每一行,每一列必须都要至少有一个s,n要可以到所有的黑格,n的上下左右如果 ...
- codeforces Magnets
link:http://codeforces.com/contest/344/problem/A 这道题目很简单. 把输入的01 和10 当做整数,如果相邻两个数字相等的话,那么就属于同一组,否则,就 ...
- CodeForces Round 200 Div2
这次比赛出的题真是前所未有的水!只用了一小时零十分钟就过了前4道题,不过E题还是没有在比赛时做出来,今天上午我又把E题做了一遍,发现其实也很水.昨天晚上人品爆发,居然排到Rank 55,运气好的话没准 ...
- Qt Examples Qt实例汇总
ActiveQt Examples Using ActiveX from Qt applications. Animation Framework Examples Doing animations ...
- 12 Tips for Accurate Project Estimating
Projects typically involve many dynamic aspects, yet they're often constrained by finite conditions. ...
随机推荐
- Go语言核心36讲(Go语言基础知识二)--学习笔记
02 | 命令源码文件 我们已经知道,环境变量 GOPATH 指向的是一个或多个工作区,每个工作区中都会有以代码包为基本组织形式的源码文件. 这里的源码文件又分为三种,即:命令源码文件.库源码文件和测 ...
- 通过ideviceinstaller获取IOS APP bundleId
查看ios设备udid: idevice_id -l 查看ios应用的bundleId: # 安装ideviceinstaller brew install ideviceinstaller # 查看 ...
- ShutdownHook原理
微信搜索"捉虫大师",点赞.关注是对我最大的鼓励 ShutdownHook介绍 在java程序中,很容易在进程结束时添加一个钩子,即ShutdownHook.通常在程序启动时加入以 ...
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...
- 机器学习:KNN
KNN:K-nearst neighbors 简介: k-近邻算法采用测量不同特征值之间的距离来进行分类,简而言之为:人以类聚,物以群分 KNN既可以应用于分类中,也可用于回归中:在分类的预测是,一般 ...
- 2021.9.18考试总结[NOIP模拟56]
T1 爆零 贪心地想,肯定要先走完整个子树再走下一个,且要尽量晚地走深度大的叶子.所以对每个点的儿子以子树树高为关键字排序$DFS$即可. 也可$DP$. $code:$ T1 #include< ...
- 【做题记录】 [HEOI2013]SAO
P4099 [HEOI2013]SAO 类型:树形 \(\text{DP}\) 这里主要补充一下 \(O(n^3)\) 的 \(\text{DP}\) 优化的过程,基础转移方程推导可以参考其他巨佬的博 ...
- Veritas Backup Exec™ 21.3 Multilingual (Windows)
Backup Exec 21.3, Release date: 2021-09-06 请访问原文链接:https://sysin.org/blog/veritas-backup-exec-21-3/, ...
- 转载:使用Xilinx IP核进行PCIE开发学习笔记(一)简介篇
https://zhuanlan.zhihu.com/p/32786076 最近接触到一个项目,需要使用PCIE协议,项目要求完成一个pcie板卡,最终可以通过电脑进行通信,完成电脑发送的指令.这当中 ...
- Python Linux Ubuntu apt安装PyCharm
PyCharm一个是Python集成开发环境,它既提供收费的专业版,也提供免费的社区版本.PyCharm带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Proj ...