2016级算法期末模拟练习赛-C.AlvinZH的青春记忆II
1084 AlvinZH的青春记忆II
思路
中等题,二分。
简化题意,一列数字,每秒会自动-1,特殊操作可以使一个数在1s内-k,问这些数都减至0需要多久。
答案肯定在[1,xMax]之间,采用二分的方法找到最小时间。
如何判断一个时间值是否符合要求呢?对于≤mid的数,自然消减就好,对于>mid的数,需要特殊操作,设特殊操作次数为s,则有 \(k*s + (mid-s) = Xi\),解得 \(s = (X[i]-mid) / (k-1)\)。
分析
注意三个问题,
第一,除0问题,k-1可能为0,需要提前特判,如果k==1,那个和自然递减没有差别,答案直接输出xMax。
第二,式子中有可能会出现小数,如何处理?向上取整!\(s = ceil(1.0*(X[i]-mid) / (k-1))\)。
第三,计算过程中s需要多次叠加,有可能会超过int范围,需要使用long long。
参考代码
//
// Created by AlvinZH on 2017/12/9.
// Copyright (c) AlvinZH. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int n, k;
int X[100000+10];
int Xmax;
int main ()
{
while(~scanf("%d %d", &n, &k))
{
Xmax = 0;
for(int i = 0; i < n; i++)
{
scanf("%d", &X[i]);
if(X[i] > Xmax)
Xmax = X[i];
}
if(k == 1)
{
printf("%d\n", Xmax);
continue;
}
int ans = 0;
int l = 1, r = Xmax, mid;
while (r >= l)
{
mid = (l+r)/2;
long long cnt = 0;
for (int i = 0; i < n; i++)
{
if(X[i] > mid)
{
long long s = ceil(1.0*(X[i]-mid) / (k-1));
cnt += s;
}
}
if (cnt > mid)
l = mid+1;
else
r = mid-1, ans = mid;
}
printf ("%d\n", ans);
}
}
2016级算法期末模拟练习赛-C.AlvinZH的青春记忆II的更多相关文章
- 2016级算法期末模拟练习赛-E.AlvinZH的青春记忆III
1083 AlvinZH的青春记忆III 思路 难题,二分图. 说这是一个考察二分图的题目,你可以会说"不可能",这哪里像一个二分图了!这真的是一个二分图,考察的是最小顶点覆盖. ...
- 2016级算法期末模拟练习赛-F.AlvinZH的青春记忆IV
1086 AlvinZH的青春记忆IV 思路 难题,动态规划. 这是一道很有意思的题,因为它不仅卡了时间,也卡了空间,而且卡的很妙很迷. 光是理解题意已经有点难度,简化题意:两串数字序列,相等的数字定 ...
- 2016级算法期末模拟练习赛-B.AlvinZH的青春记忆I
1083 AlvinZH的青春记忆I 思路 中等题,动态规划. 简化题意,一个环上取数,数不可相邻,取取得数之和最大值. 环不好表示,可以解开变成一列数,那么答案应为下列两种情况较大者. ①:取第一个 ...
- 2016级算法期末模拟练习赛-D.AlvinZH的序列问题
1111 AlvinZH的序列问题 思路 中等题,动态规划. 简化题意,. 坑点一:二维int数组MLE,明显会超过内存限制,由于\(n\)最大为1e4,那么我们的dp数组最大也是1e4,考虑使用sh ...
- 2016级算法期末模拟练习赛-A.wuli51和京导的毕业旅行
1063 wuli51和京导的毕业旅行 思路 中等题,二分+贪心. 简化题意,将m+1个数字分成n份,ans为这n段中每段数字和的最大值,求ans最小值及其方案. 对于这种求最小的最大值,最常用的方法 ...
- 2016级算法期末上机-H.难题·AlvinZH's Fight with DDLs III
1119 AlvinZH's Fight with DDLs III 思路 难题,最小点覆盖. 分析题意,某一个任务,既可以在笔记本A的 \(a\) 模式下完成,也可以在笔记本B的 \(b\) 模式下 ...
- 2016级算法期末上机-D.简单·AlvinZH's Fight with DDLs I
1117 AlvinZH's Fight with DDLs I 思路 简单题,动态规划. 本题与期末练习赛B题很相似,而且更为简单些.简化问题:在数字序列上取数,不能取相邻的数. DP数组定义,dp ...
- 2016级算法期末上机-F.中等·AlvinZH's Fight with DDLs II
1118 AlvinZH's Fight with DDLs II 思路 中等题,贪心. 理解题意,每次攻击中,可以使某个敌人生命值-1,自己生命值减去∑存活敌人总攻击力. 贪心思想,血量少攻击高的要 ...
- 2016级算法第二次上机-E.AlvinZH的儿时梦想——运动员篇
862-AlvinZH的儿时梦想--运动员篇 思路 难题. 应该想到,不管给出的数据如何,每一个淘汰的人不会对最终答案产生任何影响,所以每次淘汰就把人除掉就可以了,最后剩下的两个人计算它们从开始到相遇 ...
随机推荐
- SVG脚本编程简介
本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics(可伸缩矢量图形).它是W3C制定的.用矢量 ...
- [z]hadoop生态系统
http://developer.51cto.com/art/201311/415639_all.htm
- A simple way to crack VBA password in Excel file
Unbelivibale, but I found a very simple way that really works! Do the follwoing: 1. Create a new sim ...
- URL Scheme
[URL Scheme] 可以通过info.plist注册url types来实现程序自定义的协议,以供外部程序调起. NSURL *myURL = [NSURL URLWithString:@&qu ...
- Docker的安装,配置,更新和卸载
我们可以在Linux中安装Docker并运行Hello world应用程序.通过下面这些操作,我们将会学到更多有关于Docker的基础特征.我们将会学到如何: 安装Docker引擎 在一个容器中运行软 ...
- 前端福利之overflow-scrol 怎么隐藏滚动条(转)
最近用vue写wap站的时候遇到了微信打开页面滚动条无法隐藏的问题. 对于隐藏滚动条,我们最常用的方法首先是: 1.使用以下CSS可以隐藏滚动条: .container::-webkit-scroll ...
- (最短路 SPFA)Currency Exchange -- poj -- 1860
链接: http://poj.org/problem?id=1860 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 2326 ...
- 网络排错与网络命令的理解ping-traceroute-host(nslookup)-tcpdump获取对方的mac
1. 虚拟机中NAT架构的网络结构中, 虚拟网卡VMnet8(192.168.134.1)是连接宿主主机. 用虚拟网段中主机(192.168.134.133),ping VMnet8 为什么没有响 ...
- 企业搜索引擎开发之连接器connector(二十二)
下面来分析线程执行类,线程池ThreadPool类 对该类的理解需要对java的线程池比较熟悉 该类引用了一个内部类 /** * The lazily constructed LazyThreadPo ...
- 从极速飞艇源码 VantComponent 谈 小程序维护
在开发极速飞艇源码详情咨询Q166848365小程序的时候,我们总是期望用以往的技术规范和语法特点来书写当前的小程序,所以才会有各色的小程序框架,例如 mpvue.taro 等这些编译型框架.当然这些 ...