首先,只需要找到一个有磁性的位置,就可以通过$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 }

最新文章

  1. 优化JavaScripe 提升首页加载速度的几种方案解析
  2. 【Eclipse】在Eclipse工具中自定义类注释
  3. 02-JAVA中的基本语法
  4. WinFom基本属性
  5. Java程序员要注意的10个问题————————好东西就是要拿来分享
  6. CF 444A(DZY Loves Physics-低密度脂蛋白诱导子图)
  7. 操作数组的工具类Arrays
  8. sublime text 我的常用配置
  9. JavaScript知识点整理(一)
  10. sourcetree的使用
  11. Day3--Python--字符串,for循环,迭代
  12. eclipse添加mybatis插件
  13. 洛谷 P2678 跳石头
  14. 阿里巴巴Java开发规约插件p3c详细教程及使用感受 - 转
  15. oogle advertiser api开发概述——速率限制
  16. httpService 和 WebService接口协议
  17. 20155304 《网络对抗》Exp9 web安全基础实践
  18. Linux应用监控工具
  19. tcpcopy架构
  20. ASP.net-空白页的问题

热门文章

  1. display:none、visibility:hidden,opacity:0三者区别
  2. 面试官问我MySQL调优,我真的是
  3. 深入思考软件工程,开启 DevOps 之旅
  4. React Native之新架构中的Turbo Module实现原理分析
  5. 七牛云的 python sdk 是如何 批量删除资源的
  6. hmac和socketserver
  7. 洛谷2494 [SDOI2011]保密 (分数规划+最小割)
  8. 【机器学习基础】逻辑回归——LogisticRegression
  9. Windows主机入侵排查
  10. Redis:学习笔记-01