[题解]ABC337E Bad Juice
一开始的想法如下:

就是利用二分法,对于一个区间\([l,r]\),分成\([l,mid-1],[mid,r-1]\)两部分,各找两个朋友喝,右边还空出一个\(r\),如果前面两个朋友都没中毒,那说明\(r\)这瓶有毒。
但仔细一想,我们发现\([1,n)\)的瓶子中任意一个我们分出的区间\([l,r]\),都用去了\(r-l+1\)个朋友。比如上图中\([4,7]\)区间,就用了\(4\)个朋友。所以我们最终只是省下了\(1\)个朋友,用去了\(n-1\)个朋友。
这显然不够优,我们应该怎么分配呢?
你可能以前玩过一个猜数字的游戏:给你\(6\)张卡片,问你想的数在哪些卡片上。最终就可以猜出你想的数。
这个游戏的原理就是第\(i\)张卡片上的数字,都是二进制表示中第\(i\)为\(1\)的数字。最终你选了哪些卡片,就说明你选的数二进制表示中哪些位上是\(1\)。
我们用同样的原理,让第\(i\)个朋友去喝二进制表示中第\(i\)为是\(1\)的果汁。最终我们只需要用\(\lfloor \log_2(n-1)\rfloor+1\)个朋友。
之所以是\(n-1\),是因为我们可以把最后一瓶空出来,如果所有朋友都没中毒,说明毒就下在最后一瓶里。所以我们需要特判,如果最终结果为\(0\),则输出\(n\)。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
int n;
map<int,set<int>> ma;
string s;
int main(){
cin>>n;
int m=__lg(n-1)+1;
cout<<m<<endl;
for(int i=1;i<n;i++){
int tmp=i;
for(int j=1;tmp;j++){
if(tmp&1) ma[j].insert(i);
tmp>>=1;
}
}
for(auto i:ma){
cout<<i.second.size()<<" ";
for(auto j:i.second) cout<<j<<" ";
cout<<endl;
}
cin>>s;
s=' '+s;
int ans=0;
for(int i=m;i>=1;i--){
ans<<=1;
if(s[i]=='1') ans|=1;
}
cout<<(ans==0?n:ans)<<endl;
return 0;
}
[题解]ABC337E Bad Juice的更多相关文章
- OWASP JUICE SHOP部分题解
本文作者:S0u1 0×00 简介 OWASP JUICE SHOP是一个开源的web应用靶场,里面包含了共记47个漏洞挑战任务,囊括了OWASP TOP 10的各个点,是一个很不错的渗透测试练手项目 ...
- 【BZOJ4435】[Cerc2015]Juice Junctions Tarjan+hash
[BZOJ4435][Cerc2015]Juice Junctions Description 你被雇佣升级一个旧果汁加工厂的橙汁运输系统.系统有管道和节点构成.每条管道都是双向的,且每条管道的流量都 ...
- jzoj5991. 【北大2019冬令营模拟2019.1.6】Juice
题面 题解 好迷-- //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define ...
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
随机推荐
- HashMap之装载因子
装载因子:load fator,散列表中关键字个数和散列表长度之比.她用于度量所有关键字填充哈希表后饱和的程度. 重哈希:rehash,亦或再散列,当装载因子达到指定阈值时,散 ...
- python 多进程通讯三种方法性能对比(queue, pipe, zeromq)
当然,这三种办法都会在两个进程之间把数据复制一遍,效率肯定没有 shared memory 高,但是考虑到这三种方式都不用考虑锁之类东西,用起来是比较方便的.这三种方式的实现的功能都是差不多的,但是在 ...
- 快速上手python的坑
快速上手python的坑 这篇文章是乱写的 零 使用的软件及其版本 python 3.6 PyCharm Community Edition 2016.2.3 一 输入输出 输出 (在python 3 ...
- JuiceFS介绍
简单介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布.提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同 ...
- 模拟VL02N交货单批次拆分
昨天听到一个好玩的需求,自开发交货单批次拆分的界面和实现批次拆分. 批次拆分的函数就不提了,这里来说说自开发程序怎么模拟出批次拆分的那种样子.. 效果图: 1,首先定义一个交货行项目表和拆分出来的批次 ...
- X6在数栈指标管理中的应用
一.需求背景 产品成立之初,产品的需求是需要对各种指标进行公式运算,组合成一个新的复合指标,供后续使用.当时产品提出的形式是有两种: 一种是直接让用户输入,不作任何其他操作,但这种方式带来的问题一 ...
- 开源项目丨ChengYing 1.1版本重磅发布:新增超多功能,全新优化体验!
ChengYing是一站式全自动化全生命周期大数据平台运维管家,提供大数据产品的一站式部署.运维.监控服务,其可实现产品部署.产品升级.版本回滚.扩缩节点.日志诊断.集群监控.实时告警等功能,致力于最 ...
- Java源码分析系列笔记-2.Synchronized
目录 1. 是什么 2. 什么时候使用 2.1. 多线程访问共享资源时的并发问题 2.1.1. 究其原因 2.1.2. 解决的方法 3. 如何使用 3.1. 修饰 static 方法.使用的锁是当前类 ...
- MySQL 字符集、排序规则与查询关系详解
MySQL 查询是否区分大小写及重音敏感,取决于创建时指定的字符集(character set)和排序规则(collation). (1)字符集(Character Set):规定可存储的字符,如 u ...
- springboot中获取配置文件的值
1.在application.properties中ds-portal_service_port=http://192.168.**.**:10001 2.在java中@Autowiredprivat ...