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

  1. 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 ...

  2. B - Magnets

    Problem description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't ...

  3. CodeForces - 344A Magnets (模拟题)

    CodeForces - 344A id=46664" style="color:blue; text-decoration:none">Magnets Time ...

  4. Codeforces 344A Magnets

    Description Mad scientist Mike entertains himself by arranging rows of dominoes. He doesn't need dom ...

  5. Codeforces 1345 D - Monopole Magnets

    传送门:D. Monopole Magnets 这一场也是很神奇了,先是推迟三天,后是评测鸡崩了,unrated... 题意:每一行,每一列必须都要至少有一个s,n要可以到所有的黑格,n的上下左右如果 ...

  6. codeforces Magnets

    link:http://codeforces.com/contest/344/problem/A 这道题目很简单. 把输入的01 和10 当做整数,如果相邻两个数字相等的话,那么就属于同一组,否则,就 ...

  7. CodeForces Round 200 Div2

    这次比赛出的题真是前所未有的水!只用了一小时零十分钟就过了前4道题,不过E题还是没有在比赛时做出来,今天上午我又把E题做了一遍,发现其实也很水.昨天晚上人品爆发,居然排到Rank 55,运气好的话没准 ...

  8. Qt Examples Qt实例汇总

    ActiveQt Examples Using ActiveX from Qt applications. Animation Framework Examples Doing animations ...

  9. 12 Tips for Accurate Project Estimating

    Projects typically involve many dynamic aspects, yet they're often constrained by finite conditions. ...

随机推荐

  1. 题解 ABC216H Random Robots

    link Solution 考虑一个不合法方案,它一定最后位置的逆序对数不为 \(0\),而且可以发现的是,存在对称方案使得最后逆序对数奇偶性不同,所以我们如果加上 \((-1)\)^{\sigma( ...

  2. 题解 「ZJOI2018」历史

    题目传送门 Description 九条可怜是一个热爱阅读的女孩子. 这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣. 这个世界有 \(n\) 个城市,这 \(n\) 个城市被恰 ...

  3. SpringBoot-thymeleaf-静态资源引入和接管

    引入前端 templates下放html页面 static下放css.js.image等静态资源 添加thymeleaf命名空间 <html lang="en" xmlns: ...

  4. Java(6)流程控制语句中分支结构if与switch

    作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201528.html 博客主页:https://www.cnblogs.com/testero ...

  5. NXOpen.UF.UFView.CycleObjects 的使用

    Public Sub CycleObjects(ByVal view As NXOpen.Tag, ByVal type As NXOpen.UF.UFView.CycleObjectsEnum, B ...

  6. Java并行任务框架Fork/Join

    Fork/Join是什么? Fork意思是分叉,Join为合并.Fork/Join是一个将任务分割并行运行,然后将最终结果合并成为大任务的结果的框架,父任务可以分割成若干个子任务,子任务可以继续分割, ...

  7. 【二食堂】Beta - 设计和计划

    Beta设计和计划 需求再分析 根据助教.老师.用户以及各个团队PM的反馈意见,我们的项目目前有以下问题: 功能不完整 实用价值不高 两方面的缺陷,所以在Beta阶段,我们工作的中心还是完成项目规划中 ...

  8. Noip模拟15 2021.7.14

    T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$ ...

  9. 微软认真聆听了开源 .NET 开发社区的炮轰: 通过CLI 支持 Hot Reload 功能

    微软近日激怒了开源.NET社区,起因是它删除了开源.NET的一项旗舰功能,以提升Visual Studio 的吸引力,尤其是针对与Visual Studio颇有渊源的跨平台源代码编辑器Visual S ...

  10. git commit--fatal: unable to auto-detect email address

    git commit的时候报错 *** Please tell me who you are. Run git config --global user.email "you@example ...