HDU 6469 /// 二分
题目大意:
分裂怪有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 /// 二分的更多相关文章
- hdu 4024 二分
转自:http://www.cnblogs.com/kuangbin/archive/2012/08/23/2653003.html 一种是直接根据公式计算的,另外一种是二分算出来的.两种方法速度 ...
- hdu 1669(二分+多重匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1669 思路:由于要求minimize the size of the largest group,由此 ...
- HDU 3586 二分答案+树形DP判定
HDU 3586 『Link』HDU 3586 『Type』二分答案+树形DP判定 ✡Problem: 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏 ...
- hdu 4004 (二分加贪心) 青蛙过河
题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4004 题目意思是青蛙要过河,现在给你河的宽度,河中石头的个数(青蛙要从石头上跳过河,这些石头都是在垂 ...
- hdu 5046 二分+DLX模板
http://acm.hdu.edu.cn/showproblem.php?pid=5046 n城市建k机场使得,是每个城市最近机场的距离的最大值最小化 二分+DLX 模板题 #include < ...
- HDU 5699 二分+线性约束
http://acm.hdu.edu.cn/showproblem.php?pid=5699 此题满足二分性质,关键在于如何判断当前的时间值可以满足所有的运送方案中的最长的时间. 对于每一次枚举出的k ...
- hdu 3277(二分+最大流+拆点+离线处理+模板问题...)
Marriage Match III Time Limit: 10000/4000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- hdu 3081(二分+并查集+最大流||二分图匹配)
Marriage Match II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- hdu 1816(二分+2-sat)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1816 思路:首先将每把钥匙i拆成两个点i和i+2n,分别表示选与不选,对于被分成n对的钥匙,由于只能选 ...
随机推荐
- azkaban简单使用
步骤 1.通过web服务器创建项目,项目名称和描述都是必须填的2.上传zip包 job定义 1.简单的job一个job就是一个properties文件,只不过文件是以.job结尾,文件里面定义了job ...
- k3 cloud移动审批提示实体类型BD_TaxRate中不存在名为AmountDigits属性
原因是由于字段没有正确绑定币别,找到对应的字段并修改绑定币别
- JSONP面试
jQuery 的 JSONP的原理是动态创建一个 script 标签,利用src 发送请求,获取数据 回调函数的键名叫做 callback 跟ajax没有关系 JSONP:主要是利用 script标 ...
- 164-基于TI DSP TMS320C6455和Altera FPGA EP2S130的Full CameraLink PDS150接口板卡
一.板卡概述 本板卡由我公司自主研发,板卡采用DSP+FPGA的结构,DSP使用TMS320C6455芯片,FPGA采用ALTERA的高端FPGA芯片Stratix II EP2S系列EP2S130, ...
- Linux防火墙--iptables--白名单配置
1.服务器22端口和1521端口开通给指定IP [root@node2 sysconfig]# iptables -t filter -nL INPUT Chain INPUT (policy ACC ...
- 如何将 不确定的有穷自动机(NFA) 转化为 确定的有穷自动机(DFA) 并将DFA最简化
一.从NFA到DFA的转换 例如下图: DFA的每个状态都是一个由NFA中的状态构成的集合,即NFA状态集合的一个子集 r =aa*bb*cc* 二.从带有ε-边的NFA到DFA的转换 r=0*1*2 ...
- 基因id
每个物种都有一个对应的Taxonomy ID: 9606 :人类 10090 :小鼠
- VM安装OSX进度条一半时卡住不动,【附】OSX10.10 ISO镜像文件
安装OSX10.10真是一波多折,先是下载了一个5G多的原版dmg文件,转成ISO后在虚拟机上无法识别,后按网上的说的方法在提取出来的BaseSystem.dmg文件,再转成ISO文件,可以 ...
- Ubuntu Visual code安装与使用
1.直接启动软件中心,输入visual studio code,点击install即可,千万千万不要去装逼搞什么linux指令安装,死都不知道怎么死的 2.Visual code是以文件夹为工程目录的 ...
- Git 中关于一次完整的提交的命令
1.创建仓库(git init .git clone URL) 有两种新建 Git 项目仓库的方法.第一种是在本地通过初始化来创建新的 Git 仓库.第二种是从已有的 Git 远程仓库中克隆出一个仓库 ...