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对的钥匙,由于只能选 ...
随机推荐
- 本机ip地址怎么查
转自:https://www.192ly.com/basic/local-ip-address-lookup-method.html 百度搜索一下[IP],你就可以轻松看到你的IP地址了,百度出来的 ...
- 2018-2-13-win10-UWP-RSS阅读器
title author date CreateTime categories win10 UWP RSS阅读器 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 1 ...
- Linux学习笔记之文件与文件系统的压缩与打包
四.文件与文件系统的压缩与打包 用途: 传输时减少带宽 Linux系统常见的压缩命令 Compass(旧版压缩,并且在centOS中默认为不安装) gzip, zcat bzip2, bzcat zi ...
- NVIDIA Jetson TK1 开发板
TEGRA K1 — 全球的移动处理器 创新的全新 Tegra K1 处理器包含 NVIDIA Kepler™ 架构 GPU,与全球强超级计算机和 PC 游戏系统所采用的 GPU 无异.这种 GPU ...
- 一、表单和ajax中的post请求&&后台获取数据方法
一.表单和ajax中的post请求&&后台获取数据方法 最近要做后台数据接收,因为前台传来的数据太过于混乱,所以总结了一下前台数据post请求方法,顺便写了下相对应的后台接收方法. 前 ...
- Redis和Ehcached的区别
Redis 属于独立的运行程序,需要单独安装后,使用JAVA中的Jedis来操纵.因为它是独立,所以如果你写个单元测试程序,放一些数据在Redis中,然后又写一个程序去拿数据,那么是可以拿到这个数据的 ...
- rabbitmq 结构体
amqp_basic_properties_t props; props._flags = AMQP_BASIC_CONTENT_TYPE_FLAG | AMQP_BASIC_DELIVERY_MOD ...
- Java调用MySql数据库函数
Java调用MySql数据库函数 /** * 调用mysql的自定义函数 * */ private void test() { logger.info("show task start &q ...
- Java中的heap和stack
heap和stack Java的内存分为两类,一类是栈内存,一类是堆内存. 栈内存:是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配 ...
- 【Linux】运维常用命令
1.查看进程 ps -ef 如果需要查看特定的进程,比如redis的 ps -ef | grep redis 2.强制杀死进程 kill -9 进程id 3.忽略输出后台启动 nohup ./red ...