题目链接

题意:
1:交互题
2:给出n
3:共有2 ^ n个队员
4:? a b 的意思是向系统询问a,b谁赢的场数多(即谁处于图中的更高层)
5:最终结果表示为 ! res
6:最多询问次数是 (2/3)*(2^(n+1) ) 上取整
题解:我们可以计算一下,如果我们两两询问,最终的询问次数是2^(n+1)-1是高于题目限制次数,那么我们就开始想这减少询问次数。

我们尝试着四个一询问,我们以 1,2,3,4为例:两个一组,假设我们比较1,3,当两个相等的时候,他们一定是在最低层;但是如果1>3的话,可能1,3都在第二层,这种情况下如果我们仍然期望确定第二层的数量是不行的,这样询问次数在最坏的情况下仍然是2^(n+1)的,所以我们这里直接确定第三层(即向上两层),这种情况下,我们最多询问两次就可以确定上两层的数。我们可以计算一下询问数量,本来三次才能确定两层的数字,现在只需要询问两次,这样就是(2/3 * 2 ^ (n+1))正好符合题中的限制次数。

下面是AC代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
using namespace std;
vector<int> vec;
int main()
{int t;cin>>t;while(t--){int n,num=1;cin>>n;vec.clear();for(int i=1;i<=n;i++) num*=2;for(int i=1;i<=num;i++) vec.push_back(i);if(num>=4){while(vec.size()>2){int len=vec.size();for(int i=0;i<len;i+=4){cout<<"?"<<" "<<vec[i]<<" "<<vec[i+2]<<endl;//cout.flush();int x;cin>>x;if(x==1){cout<<"?"<<" "<<vec[i]<<" "<<vec[i+3]<<endl;//cout.flush();int x;cin>>x;if(x==1) vec.push_back(vec[i]);else if(x==2) vec.push_back(vec[i+3]);}else if(x==2){cout<<"?"<<" "<<vec[i+1]<<" "<<vec[i+2]<<endl;//cout.flush();int x;cin>>x;if(x==1) vec.push_back(vec[i+1]);else if(x==2) vec.push_back(vec[i+2]);}else if(x==0){cout<<"?"<<" "<<vec[i+1]<<" "<<vec[i+3]<<endl;//cout.flush();int x;cin>>x;if(x==1) vec.push_back(vec[i+1]);else if(x==2) vec.push_back(vec[i+3]);}}vec.erase(vec.begin(),vec.begin()+len);}}cout<<"?"<<" "<<vec[0]<<" "<<vec[1]<<endl;//cout.flush();int x;cin>>x;if(x==1) cout<<"!"<<" "<<vec[0]<<endl;else cout<<"!"<<" "<<vec[1]<<endl;}return 0;
}

这个题中要求加上cout.flush()的,但是不加也对。

D. Tournament Countdown相关推荐

  1. CountDownLatch 的 .await() 的线程阻塞 和countDown() 计时唤醒

    1.CountDownLatch end = new CountDownLatch(N); //构造对象时候 需要传入参数N 2.end.await()  能够阻塞线程 直到调用N次end.count ...

  2. 【CF913F】Strongly Connected Tournament 概率神题

    [CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概 ...

  3. 30 Days of .NET [Windows Mobile Applications] - Day 01: Minutes to Midnight Countdown(午夜倒数器)...

    得到原作者 Chris Craft 的同意,本人可以翻译他的系列文章 30 Days of .NET [Windows Mobile Applications]并在博客园里发表.这是一个十分趣味性很高 ...

  4. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

    E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...

  5. react 倒计时 countDown

    因为项目需要做一个react倒计时组件,网络上也有,但是感觉不是很好,兼容性不高,于是自己写了一个: 1.包含 天,时,分,秒.可以根据特定的场景选择相应的展示方式; 2.提供回调函数. 1 impo ...

  6. CountDownLatch.countDown

    由于线程被await方法阻塞了,所以只有等到countdown方法使得state=0的时候才会被唤醒,我们来看看countdown做了什么 1. 只有当 state 减为 0 的时候,tryRelea ...

  7. 一个好用的时间管理Chrome扩展 - Calendar and Countdown

    作为一个程序员,很多时候需要日期倒计时的功能(count down),比如还有多少天release某个产品的某个版本. 为此我找了一个Chrome扩展,名叫Calendar and Countdown ...

  8. Tournament CodeForces - 27B(dfs)

    The tournament «Sleepyhead-2010» in the rapid falling asleep has just finished in Berland. n best pa ...

  9. 一个countDown在多线程调度下使用不当的分享

    2019独角兽企业重金招聘Python工程师标准>>> 一个countDown在多线程调度下使用不当的分享 1. 诡异的数据抖动 在一个需求开发过程中,由于有多角色需要获取每个角色下 ...

最新文章

  1. javaScript基本功001
  2. 新华三,定义服务器虚拟化市场新格局
  3. JDK源码解析 Comparator 中的策略模式
  4. 清官谈mysql中utf8和utf8mb4区别,请使用utf8mb4
  5. RedisTemplate中opsForValue()中的方法
  6. C库函数与Linux系统函数之间的关系
  7. java 多重注解_Java注解-元数据、注解分类、内置注解和自定义注解
  8. 调整DOSBOX窗口大小
  9. 如何把Netflix数据集转换成Movielens格式?
  10. Kubernetes Pod健康检查-livenessProbe和readinessProbe
  11. jeecms oracle v5_jeecms二次开发总结
  12. Spark Event Log (一)概述
  13. bin文件转换成hex的方法
  14. 微信群内接龙如何保持队形
  15. 创宇云蜜罐成为华为云联营商品,合力提供网络安全服务
  16. C++:数组、链表与哈希表
  17. 地瓜网络技术钉钉视频下载器下载钉钉群直播视频回放
  18. PhotoshopCS6视频教程学习笔记-基础部分之一
  19. 用c语言构造下三角,数据结构之获取矩阵下三角
  20. 勒索软件病毒肆虐多所高校:中招无法“挽救”

热门文章

  1. zip 命令的解释与示例
  2. Zotero使用TIPS
  3. MKS Robin nano V3.0 主板使用Klipper固件教程
  4. C#2.0新特性-泛型
  5. 使用python预测基金_使用python先知3 1创建预测
  6. html padding顺序,html中padding用法
  7. 多数据源的配置和使用
  8. COLLATE utf8_general_ci;是什么意思?
  9. 今天北京的天空是湛蓝的
  10. 用C#实现查询今天是什么节日的方法