题目描述:

传说在2345年,Byteland中举行了一场质因数分解比赛,规则中说名次为1,2,3的参赛者将获得奖金。比赛顺利结束了,但是选手们发现主办方进行了暗箱操作,他们将选手从一个整数a<1开始排名,所以选手的名次为a,a+1,a+2...0,1,2,3 ...,也就是说拿到奖金的并不是真正的前三名。虽然选手怨声载道,主办方坚称比赛公平公正。

今年是3345年,你打算还原千年前这场比赛的名次,但是主办方称由于技术原因排名遗失了,连用于排名的a也丢失了。所幸,在Byteland中生活的都是机器人,所以你可以询问这些千年前的参赛选手。为了谨慎起见,你可以每次询问一个参赛者,某一个参赛者的比赛成绩比它好还是比它差。但是,机械心理学家告诉你,这些选手不一定愿意回答你的提问。

具体地:

名次小于1的选手由于耿耿于怀,如果它应该回答另一个参赛者成绩比它好,它就会选择不回答,否则它会如实回答。

名次为1的选手决定闷声大发财,它无论如何都不会回答任何提问。

名次为2的选手只当询问排名为3的选手时才回答比排名3的好,其他时候都不回答。

名次为3的选手趾高气扬,如果它应该回答另一个参赛者成绩比它好,它就会选择不回答,否则它会如实回答。

名次大于3的选手感觉自己水平不行,如果它应该回答另一个参赛者成绩比它差,它就会选择不回答,否则它会如实回答。

1<=n<=1000,你需要在11500次询问内还原每个选手的名次。

思路:

总结对于x<1的会对于比他大的如实回答,x>3的会对比他小的如实回答,还有2问3有回答,其余都是不回答。于是我们可以先用2*n次询问找出最小的数以及x>3的数。

我们把不是x>3的数进行二分排序,最后三个数就是123,接下来在两两枚举这三个数,确认每个数分别对应哪个名次。

在同理把x>3的也二分排序一下。

询问次数是2*n+nlogn+6。时间效率是n2

以下代码:

#include "rank.hpp"
#define il inline
using namespace std;
const int N=1005;
vector<int> ans;
bool f[N];
int h[N],a[N],tot,b[N];
il int Min(int x,int y){char c1=ask(x,y),c2=ask(y,x);if(c1=='g')f[x]=1;if(c2=='g')f[y]=1;if(c1=='b'||c2=='g')return x;return y;
}
il void ins1(int x){int l=1,r=tot;while(l<r){int mid=(l+r+1)>>1;if(ask(a[mid],x)=='b')l=mid;else r=mid-1;}for(int i=tot;i>=l+1;i--)a[i+1]=a[i];a[l+1]=x;tot++;
}
il void ins2(int x){int l=1,r=tot;while(l<r){int mid=(l+r+1)>>1;if(ask(x,a[mid])=='g')l=mid;else r=mid-1;}for(int i=tot;i>=l+1;i--)a[i+1]=a[i];a[l+1]=x;tot++;
}
vector<int> work(int n){int x=0;for(int i=1;i<n;i++)x=Min(x,i);a[1]=x;tot=1;for(int i=0;i<n;i++){if(i==x||f[i])continue;ins1(i);}bool pd=0;for(int i=tot-2;i<=tot;i++){for(int j=tot-2;j<=tot;j++){if(i!=j&&ask(a[i],a[j])=='b'){b[a[i]]=2;b[a[j]]=3;x=a[j];pd=1;break;}}if(pd)break;}for(int i=tot-2;i<=tot;i++)if(!b[a[i]])b[a[i]]=1;for(int i=1;i<tot-2;i++)b[a[i]]=i-tot+3;tot=1;a[1]=x;for(int i=0;i<n;i++){if(f[i])ins2(i);}for(int i=2;i<=tot;i++){b[a[i]]=i+2;}for(int i=0;i<n;i++)ans.push_back(b[i]);return ans;
}

View Code

转载于:https://www.cnblogs.com/Jessie-/p/10416024.html

dtoj#4179. 排行(rank)相关推荐

  1. Vue2开发的读书WebAPP

    前言 初学vue.js,官网的文档写的很清楚,看着不难.俗话说:光说不练假把式.程序猿学个新东西还是要敲出来看看效果比较好.最开始是想搞个音乐类的,毕竟天天都会听歌,但发现搞音乐类的太多了,我再搞个多 ...

  2. 实用机器学习-学习笔记

    文章目录 3.5多层感知机 3.5.1手动提取特征到学习特征 3.5.2线性方法到多层感知机 3.5.3代码实现 4.2过拟合和欠拟合 4.2.1模型选择 4.2.2总结 9.1模型调参 9.1.1思 ...

  3. 移动端音乐WebApp

    这篇文章是写给自己今后复习用的笔记,如果有哪些不懂的,可以私信,不喜也勿喷,感谢阅读~~~ github源码地址:Music 慕课原课程地址 版本: Node – v10.15.0 Vue – 2.5 ...

  4. php布尔教育,布尔教育2016PHP加强视频教程

    第一章  变量 1.1: 类型 (lesson 1) 整型 , 浮点型 , 字符串 , 布尔型 , 数组 , 对象 ,NULL, 资源 变量是个盒子 , 盒子里面装的是变量的值 不同的盒子就是变量类型 ...

  5. R语言爬虫:当当图书畅销榜(近7日)

    时间:2018-10-9 爬取内容:当当图书畅销榜(近7日):书名.作者.出版社.推荐率.出版时间.价格.折扣.网址 R语言爬虫:当当图书畅销榜(近7日) 通过对其他人爬虫代码的学习,发现有相当一部分 ...

  6. 一步步构建剧本杀门店应用小程序

    趁管控在家的这几周,做了一套剧本杀的线上预约.支付.点评微信小程序.感谢大白.社区各自愿者与医护人员的长期付出,期待上海早日解封,让工作.生活各方面恢复日常.本小程序适用于桌游.剧本杀.轰趴馆.私人影 ...

  7. QT(飞机大战)课设

    pro初始化 QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following d ...

  8. Python学习MongoDB之酷狗音乐数据爬取与上传

    发现URL规律,构建url,使用BeautifulSoup解析 url = 'https://www.kugou.com/yy/rank/home/1-8888.html?from=rank' url ...

  9. chapter.外部数据读取和存储1.3

    web数据的读取和存储 互联网时代,网络上每天都会产生大量的数据,如何从这些非结构化的数据中提取有效的信息进行分析尤为重要. 1.读取HTML表格 对于HTML网页中的表格数据,使用pandas中的r ...

最新文章

  1. 文巾解题 11. 盛最多水的容器
  2. python-day1
  3. EL表达式, JSTL, 获取map集合中key的value
  4. linux查询用过的历史命令,在linux中,怎麼查看系统的版本,怎麼查看自己用过的历史命令...
  5. Java 学习总结(189)—— Java 8 功能接口使用总结
  6. 每台计算机需要配置网关吗,怎么设置一台电脑作为网关
  7. 用HBuilderX代替微信开发者工具
  8. html创建表格没有网格线,excel里面的电子表格没有了网格线如何解决?
  9. BZOJ 4565 字符合并 (区间状压dp)
  10. kernel too old
  11. PDPS汉化包安装与语言界面切换操作
  12. 韦东山学习笔记——UART(串口)的使用
  13. C语言实现raw格式图像的读入和存取
  14. 7-25朋友圈(C语言版)
  15. 从T型人才理解ALM Polarion
  16. 下载网页视频并自动合成视频
  17. 学习Ajax框架之dojo:第六节——dojo类的声明和继承(附源代码)
  18. 超分辨率重建数据集制作:生成低分辨率数据集
  19. HTML相对路径--上级目录及下级目录的写法
  20. python调用chrome插件_使用Python通过Selenium WebDriver打开chrome扩展

热门文章

  1. Docker入门系列(一):目标和安排
  2. 老王讲设计模式(一)——策略模式
  3. ffmpeg 编译成功,Mark一下
  4. 我眼中的性能测试工程师
  5. Windows Azure真实案例--Lokad 公司通过软件+服务高效提供先进的预测服务
  6. 小白设计模式:桥接模式
  7. 一个项目涉及到的50个Sql语句
  8. SpringBoot集成Kafka集群并实现接收_发送消息操作_以及常见错误_亲测---Kafka工作笔记005
  9. 大数据_MapperReduce_Hbase的优化_存数据_自动计算分区号 自动计算分区键---Hbase工作笔记0027
  10. Web前端工作笔记013---拦截所有的ajax请求,设置出错信息