题目大意:

分裂怪有1到n种等级,

第1级的分裂怪称为原子怪,它不会分裂,被击杀时会产生a[1]点经验;

而第k级的分裂怪死亡时则会分裂成a[k]个第k - 1级的分裂怪。

一个体力可以杀死一个怪物。

q个询问,每次给定一个总体力值,求最多能获得多少经验

二分消灭的1级怪的个数,不断向上合并,能达到n级怪就是可行的

合并中应该向上取整

假设 1个i级怪会分裂成3个i+1级怪,此时若i+1级怪消灭了5个,则至少应消灭2个i级怪

若有连续很多级别的怪物只会分裂成1个怪物 那么就会出现一条长链

把这一整条长链合并成一个点 记录下这个点离合并了多少个点就可以计算体力值的耗费了

#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define LL long long
#define inc(i,j,k) for(int i=j;i<=k;i++)
#define dec(i,j,k) for(int i=j;i>=k;i--)
#define gcd(i,j) __gcd(i,j)
#define mem(i,j) memset(i,j,sizeof(i))
const int N=1e5+;
const int mod=1e9+; int n,q,tot;
LL v[N],s[N]; bool check(LL m,LL w) {
int sum=n; // 还需要消灭sum个级别的怪物才能获得经验
inc(i,,tot) {
if(m==) return (w-sum)>=;
// 在消灭低级怪M个的基础上
// 此时必须消灭当前级别的m个怪物
// 剩余体力还有w 到第n级还有sum个级别
sum-=v[i]; w-=m*v[i];
if(i<tot) m=m/s[i+]+(m%s[i+]== ? :); // 向上取整
if(w<) return ; // 体力不够 无解
}
return ;
} int main()
{
scanf("%d%d",&n,&q);
tot=; v[tot]=1LL;
scanf("%lld",&s[tot]);
inc(i,,n) {
LL t; scanf("%lld",&t);
if(t==) v[tot]++;
else v[++tot]=, s[tot]=t;
// 把只能分裂1个低级怪的怪物链合起来
}
while(q--) {
LL w; scanf("%lld",&w);
LL L=,R=(LL)1e9,ans=;
while(L<=R) {
LL M=(L+R)>>;
if(check(M,w)) ans=M, L=M+;
else R=M-;
} // 二分一共能打倒的一级怪的个数
printf("%lld\n",ans*s[]);
} return ;
}

HDU 6469 /// 二分的更多相关文章

  1. hdu 4024 二分

    转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html   一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...

  2. hdu 1669(二分+多重匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...

  3. HDU 3586 二分答案+树形DP判定

    HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...

  4. hdu 4004 (二分加贪心) 青蛙过河

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...

  5. hdu 5046 二分+DLX模板

    http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...

  6. HDU 5699 二分+线性约束

    http://acm.hdu.edu.cn/showproblem.php?pid=5699 此题满足二分性质,关键在于如何判断当前的时间值可以满足所有的运送方案中的最长的时间. 对于每一次枚举出的k ...

  7. hdu 3277(二分+最大流+拆点+离线处理+模板问题...)

    Marriage Match III Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  8. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  9. hdu 1816(二分+2-sat)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1816 思路:首先将每把钥匙i拆成两个点i和i+2n,分别表示选与不选,对于被分成n对的钥匙,由于只能选 ...

随机推荐

  1. 攻防世界--re1

    练习文件下载:https://www.lanzous.com/i5lufub 1.使用IDA打开,进入main函数. 2.转为C代码 可以看到,输入v9之后,与v5比较,判断我们输入的flag是否正确 ...

  2. linux误用rm删除文件后恢复

    linux 系统:ubuntu16.04 误把/usr/local local文件删除了,要疯 步骤: 1.对于文件系统为ext3文件系统 sudo apt-get install ext3grep ...

  3. JS变量连续赋值

    下面就是这个经典案例: var a = {n: 1}; var b = a; a.x = a = {n: 2}; console.log(a);console.log(b); console.log( ...

  4. C#学习大纲

    一.C#:    1.进制转换    2.vs界面内容 熟悉软件    3.数据类型 :引用类型 值类型    4.变量 (存储数据)一个变量存储一个数据    5.类型转换    6.运算符:算数运 ...

  5. 20180306-time&datetime模块

    在开始介绍时间模块之前先说明几点: 一. Python中常用以下几种形式表示时间 1.时间戳 2.格式化的时间字符串 3.元组(struct_time)(共九个元素),由于Python的time模块实 ...

  6. mpvue 微信小程序半屏弹框(half-screen-dialog)

    <template> <div> <a @click="isShow">half-screen-dialog</a> <!-- ...

  7. Nginx的简单使用

    一.Nginx概述 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务.它的特点是支持高并发:资源消耗少:可以做HTTP反向代 ...

  8. GO string 的学习

    1.replace func Replace(s, old, new string, n int) string s:原来的字符串 old: 要被替换的久的字符串 new string:要替换旧字符串 ...

  9. 三栏布局只知道圣杯、双飞翼,最终评级是……F

    三栏布局,面试与工作中的常见布局.分左中右三部分,其中左右宽度已知,中间宽度自适应.根据不同的DOM顺序与CSS处理,这里写下了五类布局方式. 一.浮动布局 1 圣杯布局 L:"我问你,你就 ...

  10. python写txt文件

    with open('data.txt','w') as f: #设置文件对象 w是重新写,原来的会被抹掉,a+是在原来的基础上写 str0=u"写文件\n" #写中文要在字符串签 ...