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的更多相关文章

  1. OWASP JUICE SHOP部分题解

    本文作者:S0u1 0×00 简介 OWASP JUICE SHOP是一个开源的web应用靶场,里面包含了共记47个漏洞挑战任务,囊括了OWASP TOP 10的各个点,是一个很不错的渗透测试练手项目 ...

  2. 【BZOJ4435】[Cerc2015]Juice Junctions Tarjan+hash

    [BZOJ4435][Cerc2015]Juice Junctions Description 你被雇佣升级一个旧果汁加工厂的橙汁运输系统.系统有管道和节点构成.每条管道都是双向的,且每条管道的流量都 ...

  3. jzoj5991. 【北大2019冬令营模拟2019.1.6】Juice

    题面 题解 好迷-- //minamoto #include<bits/stdc++.h> #define R register #define ll long long #define ...

  4. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  5. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  6. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  7. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  8. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  9. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  10. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

随机推荐

  1. HashMap之装载因子

          装载因子:load fator,散列表中关键字个数和散列表长度之比.她用于度量所有关键字填充哈希表后饱和的程度.       重哈希:rehash,亦或再散列,当装载因子达到指定阈值时,散 ...

  2. python 多进程通讯三种方法性能对比(queue, pipe, zeromq)

    当然,这三种办法都会在两个进程之间把数据复制一遍,效率肯定没有 shared memory 高,但是考虑到这三种方式都不用考虑锁之类东西,用起来是比较方便的.这三种方式的实现的功能都是差不多的,但是在 ...

  3. 快速上手python的坑

    快速上手python的坑 这篇文章是乱写的 零 使用的软件及其版本 python 3.6 PyCharm Community Edition 2016.2.3 一 输入输出 输出 (在python 3 ...

  4. JuiceFS介绍

    简单介绍 JuiceFS 是一款面向云原生设计的高性能分布式文件系统,在 Apache 2.0 开源协议下发布.提供完备的 POSIX 兼容性,可将几乎所有对象存储接入本地作为海量本地磁盘使用,亦可同 ...

  5. 模拟VL02N交货单批次拆分

    昨天听到一个好玩的需求,自开发交货单批次拆分的界面和实现批次拆分. 批次拆分的函数就不提了,这里来说说自开发程序怎么模拟出批次拆分的那种样子.. 效果图: 1,首先定义一个交货行项目表和拆分出来的批次 ...

  6. X6在数栈指标管理中的应用

    ​ 一.需求背景 产品成立之初,产品的需求是需要对各种指标进行公式运算,组合成一个新的复合指标,供后续使用.当时产品提出的形式是有两种: 一种是直接让用户输入,不作任何其他操作,但这种方式带来的问题一 ...

  7. 开源项目丨ChengYing 1.1版本重磅发布:新增超多功能,全新优化体验!

    ChengYing是一站式全自动化全生命周期大数据平台运维管家,提供大数据产品的一站式部署.运维.监控服务,其可实现产品部署.产品升级.版本回滚.扩缩节点.日志诊断.集群监控.实时告警等功能,致力于最 ...

  8. Java源码分析系列笔记-2.Synchronized

    目录 1. 是什么 2. 什么时候使用 2.1. 多线程访问共享资源时的并发问题 2.1.1. 究其原因 2.1.2. 解决的方法 3. 如何使用 3.1. 修饰 static 方法.使用的锁是当前类 ...

  9. MySQL 字符集、排序规则与查询关系详解

    MySQL 查询是否区分大小写及重音敏感,取决于创建时指定的字符集(character set)和排序规则(collation). (1)字符集(Character Set):规定可存储的字符,如 u ...

  10. springboot中获取配置文件的值

    1.在application.properties中ds-portal_service_port=http://192.168.**.**:10001 2.在java中@Autowiredprivat ...