题目大意:

分裂怪有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. zabbix4.0短信告警配置

    #!/usr/bin/env python3 import requests import sys #http://utf8.api.smschinese.cn/?Uid=USERNAME&K ...

  2. smbspool - 将一个打印文件发送到一台SMB打印机

    总览 SYNOPSIS smbspool {job} {user} {title} {copies} {options} [filename] 描述 DESCRIPTION 此程序是Samba(7)套 ...

  3. 2019CCPC网络预选赛 1003 K-th occurrence 后缀自动机 + 二分 + 主席树

    题意:给你一个长度为n的字符串,有m次询问,每次询问l到r的子串在原串中第k次出现的位置,如果没有输出-1.n, m均为1e5级别. 思路:后悔没学后缀数组QAQ,其实只要学过后缀数组这个题还是比较好 ...

  4. Zen Coding – 超快地写网页代码(注:已更名为Emmet)

    这篇博客能帮助快速上手这款插件,极大地提高开发效率废话不多说直接上例子 zen codeing的缩写规则 E 元素名 (div, p); 实例:(输入完<按快捷键ctrl+E>就会显示) ...

  5. C#基础知识之类和结构

    虽然项目中一直在使用类.结构体等类型,仔细琢磨,还真无法系统的说出个所以然.记录一下类.结构体.类和结构体区别 一.类 对于类,大家都特别熟悉.简单的介绍一下类的结构,然后记录一下Class需要注意的 ...

  6. Mongodb使用shell实现与javascript的动态交互

    关于利用mongodb的shell执行脚本,这点在以前的文章中有点遗漏:现在在此篇博客中做个补充: 一.在命令行中传入脚本文件 定义一个javasciprt文件,名称为:script1.js,内容如下 ...

  7. Flutter-icon

    常用屬性 Icon( Icons.access_alarm,//设置使用哪种图标 size: 300,//设置图标大小 color: Colors.yellow,//设置图标颜色 textDirect ...

  8. vue 防止xss攻击

    1.在终端引入xss,命令: npm install xss --save 2.在vue的页面进行引入 import xss from 'xss' 测试 <p v-html="test ...

  9. oracle跟踪

    select sql_text --sql文本的前1000个字符 ,first_load_time --初次载入时间 ,last_load_time --最后载入时间 ,s.sql_fulltext ...

  10. Python3 使用HTMLTestRunner.py 报错ImportError: No module named 'StringIO'处理方法

    HTMLTestRunner.py文件是基于Python2的语法,python3使用需要修改语法: 1.>>> 94行 import io # import StringIO 2.& ...