【编码】-小Ho的防护盾-2016.08.14

解珍
• 阅读 1633

题目 : 小Ho的防护盾

时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
小Ho的虚拟城市正在遭受小Hi的攻击,小Hi用来攻击小Ho城市的武器是一艘歼星舰,这艘歼星舰会以T(T为大于0的整数)个单位时间的间隔向小Ho的城市轰击。歼星舰总共有N枚炮弹,其中第i枚会造成Ai点伤害值。

幸好小Ho的城市有K层护盾,每层护盾可以抵挡M点伤害。当某次轰击使得伤害值达或超过M时,该层护盾就会被击碎;该次轰击溢出的伤害不会作用于下一层护盾;下一次轰击将由下一层护盾承受。

同时,受损但尚未被击碎护盾会以每单位时间减少1点伤害值的速度修复自己,直到伤害值降为0。这就意味着小Hi的攻击间隔T越大,小Ho撑过这N枚炮弹的可能性就越大。

那么问题来了,小Hi的攻击间隔T至少需要是多少,小Ho城市的防护护盾才能不被全部击破?

为了使题目不存在歧义,规定:

小Hi的第i次攻击发生在时刻(i-1)*T

小Ho的第i次修复发生在时刻i-0.5

输入
第一行包含3个整数N、M和K,意义如前文所述。

第二行包含N个整数A1 - AN,表示小Hi第i枚炮弹的伤害值。

对于30%的数据,满足N<=100

对于100%的数据,满足1<=N<=100000

对于100%的数据,满足1<=K<=10, 1<=Ai, M<=100000

输出
输出使得小Ho城市的防护护盾不被全部击破的小Hi攻击间隔的最小值。如果不存在这样的T,则输出-1。

样例输入
3 5 1
3 3 3
样例输出
3

关于题目中的修复时间

题目的意思是:修复是在某一时刻瞬间完成的。所以,如果0s时受到3点伤害,0.5秒时伤害减少为2点,1.5秒时伤害减少为1点。
不要把修复过程理解为:时刻i-0.5开始修复,时刻i+0.5时才伤害减少1点

放一个别人写的代码:

代码(别人的)

来自http://hihocoder.com/contest/...
前面一大推的包含文件可以忽略。。。是acmer写代码之前的框架


#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <complex>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <cassert>
#include<iostream>
#include<cmath>
using namespace std;
#define N 100100
int a[N];
#define inf 0x3f3f3f3f
int n,m,k;
bool check(int mid)
{
    int c=0,x=m;
    for(int i=0;i<n;i++)
    {
        x=min(m,x+mid)-a[i];
        if(x<=0){
            c++;
            x=m;
        }

     //   if(mid==2)cout<<"x="<<x<<endl;
    }
    if(c>=k) return 1;
    else return 0;
}
int main()
{

     while(cin>>n>>m>>k)
     {
         for(int i=0;i<n;i++)
            cin>>a[i];
        int r=inf,l=1;
        int mid=(l+r+1)/2;
        while(l<r){
            mid=(l+r)/2;
            if(check(mid)==0)
                r=mid;
            else
                l=mid+1;
        //    cout<<mid<<endl;
        }
        if(r==inf) cout<<-1<<endl;
        else cout<<l<<endl;
     }
    return 0;
}
/*
a1b2a1
*/

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
小森森 小森森
2年前
计划助手V1.0-微信小程序(QQ小程序)-源代码分享
疫情期间在家感觉好无聊啊,于是利用空闲时间做了一个用来记录和管理小目标时间的小程序,命名为《小沙漏》。QQ版本小程序同步上线,QQ小程序叫《时间小沙漏》,欢迎大家前来体验,后期也会添加其他的新功能哦【区别】:微信小程序的代码与QQ小程序的源码是不一样的。微信小程序的源码基于微信小程序云开发,需要在有网络的情况下使用,具有同步功能,所有记录在删除小
梦
4年前
微信小程序new Date()转换时间异常问题
微信小程序苹果手机页面上显示时间异常,安卓机正常问题image(https://imghelloworld.osscnbeijing.aliyuncs.com/imgs/b691e1230e2f15efbd81fe11ef734d4f.png)错误代码vardate'2021030617:00:00'vardateT
wanQQ wanQQ
3年前
restful 风格操作es 学习
restful风格操作es|method|url地址|描述||::|::|::||PUT|host:port/索引名/类型名/文档ID|创建文档(指定文档ID)||POST|ho
Easter79 Easter79
3年前
Taro小程序自定义顶部导航栏
微信自带的顶部导航栏是无法支持自定义icon和增加元素的,在开发小程序的时候自带的根本满足不了需求,分享一个封装好的组件,支持自定义icon、扩展dom,适配安卓、ios、h5,全面屏。我用的是京东的Taro多端编译框架写的小程序,原生的也可以适用,用到的微信/taro的api做调整就行,实现效果如下。!在这里插入图片描述(https://i
Stella981 Stella981
3年前
Angular5.1新版本以及更多可用功能
Angular5.1版本发布了。这是一个小版本,包含几个小的功能和bug修复。我们也发布了AngularCli的1.6版本,以及AngularMaterial的第一个稳定版本。!(https://oscimg.oschina.net/oscnet/f8f7d922eedf43009f53ebe995e0ce54.png)新特性
Wesley13 Wesley13
3年前
5 分钟学懂 SSH 隧道技术
公众号关注“杰哥的IT之旅”,选择“星标”,重磅干货,第一时间送达!概述本文将介绍一些关于SSH隧道技术的小技巧
Wesley13 Wesley13
3年前
PHP二维数组按某个键值排序
二维数组:$arrarray('name''小坏龙','age'28),array('name''小坏龙2','age'14),arr
Stella981 Stella981
3年前
LeetCode.1029
这是小川的第383次更新,第412篇原创<br/01看题和准备今天介绍的是LeetCode算法题中Easy级别的第245题(顺位题号是1029)。公司计划采访的人数为2N。将第i个人飞往城市A的费用是i0,将第i个人飞到城市B的费用是费用i1。返回将
五星门店小程序性能优化实践
一、背景介绍1.1业务介绍五星门店小程序主要服务于五星线下门店交易场景,目前已有79个城市267家门店(包括超级体验店、城旗店、京东Mall等)在使用,用户可以通过小程序便捷地查看和购买门店的商品。五星门店小程序已实现基于Taro跨端解决方案的一码多端能力