hiho1269 优化延迟 ([Offer收割]编程练习赛1)
一道中文题,就不用翻译了。
大意是讲,一串数字,可以按照输入的先后顺序扔到一个固定大小的缓冲池子里,这个池子里的数输出顺序随意。然后计算——
SP=1*Pi1+2*Pi2+3*Pi3+...+N*PiN(其中i1, i2, ... iN是1, 2, 3, ... N的一个排列)
问在满足sp <= q的情况下,缓冲池最小可以是多少?
很水的一道题,然而还是花了我好久。
首先得出一个结论,将缓冲池里的数字按照从大到小的的顺序输出,可以得到当前缓冲池大小的最优解。那么就找一个可以在将数字扔到池子里的时候就排好序的数据结构就好了。我选的是优先队列。
然后二分+模拟就可以了,二分枚举每次缓冲池的大小。刚开始的范围是1——n。
在进行二分前先计算出大小为1和为n的情况下是否能够满足条件,如果为1可以就直接输出结果,如果为n也不行也直接输出结果。
就是这么水,但是因为我的二分写的不怎么样,所以浪费了好多时间,导致下一题已经来不及做了……
代码——
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <iostream>
using namespace std;
#define LL long long struct Node
{
int a; bool operator < (const Node& x) const
{
return x.a > a;
} }; int n;
LL q;
int s[];
priority_queue <Node> que; bool Max()
{
LL maxn = ;
for(int i = ; i < n; i++)
{
maxn += s[i]*(i+);
}
if(maxn <= q) return ;
return ;
} bool Min()
{
while(!que.empty()) que.pop();
LL minn = ;
for(int i = ; i < n; i++)
{
Node p;
p.a = s[i];
que.push(p);
}
for(int i = ; i < n; i++)
{
Node p = que.top();
que.pop();
minn += p.a*(i+);
}
if(minn > q) return ;
return ;
} void ErFen()
{
int l = ;
int r = n;
while(l <= r)
{
int lr = (l+r)/;
int sum = ;
LL ans = ;
int ii = ;
for(int i = ; i < n; i++)
{
if(sum == lr)
{
Node p = que.top();
ans += p.a*(++ii);
que.pop();
sum--;
}
Node p;
p.a = s[i];
que.push(p);
sum++;
}
while(!que.empty())
{
Node p = que.top();
ans += p.a*(++ii);
que.pop();
}
if(ans == q) {l = lr; r = lr-;}
else if(ans > q) l = lr+;
else r = lr-;
}
printf("%d\n", l);
} int main()
{
//freopen("test.in", "r", stdin);
while(~scanf("%d", &n))
{
cin >> q;
for(int i = ; i < n; i++) scanf("%d", &s[i]);
if(Max())
{
printf("1\n");
continue;
}
if(Min())
{
printf("-1\n");
continue;
}
ErFen();
}
}
hiho1269 优化延迟 ([Offer收割]编程练习赛1)的更多相关文章
- hihocoder [Offer收割]编程练习赛4
描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...
- hihocoder [Offer收割]编程练习赛61
[Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...
- [Offer收割]编程练习赛46
[Offer收割]编程练习赛46赛后题解 A.AEIOU 分析
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- [Offer收割] 编程练习赛1
A HihoCoder 1268 九宫 思路: 一般类似于数独的题目都是使用回溯解决,这里由于题目数据较小同样可以直接DFS得出结果.这里我用了一个偷懒的方法(next_permutation),直接 ...
- hihoCoder[Offer收割]编程练习赛1题目解析
题目1 : 九宫 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi近期在教邻居家的小朋友小学奥数.而近期正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不反 ...
- HihoCoder1651 : 小球染色([Offer收割]编程练习赛38)(DP的优化)
描述 小Ho面前有N个小球排成了一排.每个小球可以被染成M种颜色之一. 为了增强视觉效果,小Ho希望不存在连续K个或者K个以上的小球颜色一样. 你能帮小Ho计算出一共有多少种不同的染色方法么? 例如N ...
- [Offer收割]编程练习赛97
链接 [https://hihocoder.com/contest/offers97/problems] 题意 题目1 : 放置矩形 时间限制:10000ms 单点时限:1000ms 内存限制:256 ...
- HihoCoder1670 : 比赛日程安排([Offer收割]编程练习赛41)(模拟)
描述 H国编程联赛中有N只队伍,编号1~N. 他们计划在2018年一共进行M场一(队)对一(队)的比赛. 为了让参赛队员能得到充分的休息,联赛组委会决定:每支队伍连续两场比赛之间至少间隔一天.也就是如 ...
随机推荐
- python---django中form组件(数据添加前使用自定义方法<django预留扩展点3个>进行验证,以及源码分析)
form组件代码: from app02.models import Userfrom django.core.exceptions import ValidationError class Ajax ...
- [Apio2012]dispatching 左偏树做法
http://codevs.cn/problem/1763/ 维护子树大根堆,当子树薪水和>m时,删除最贵的点 #include<cstdio> #include<iostre ...
- PHP删除数组中空值
array_filter 函数的功能是利用回调函数来对数组进行过滤,一直都以为用回调函数才能处理, 却没有发现手册下面还有一句,如果没有回调函数,那么默认就是删除数组中值为false的项目 代码: ...
- Spark笔记之使用UDF(User Define Function)
一.UDF介绍 UDF(User Define Function),即用户自定义函数,Spark的官方文档中没有对UDF做过多介绍,猜想可能是认为比较简单吧. 几乎所有sql数据库的实现都为用户提供了 ...
- 什么是BS,BS和CS的区别有哪些
BS和CS的区别以及优缺点 C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix或 ...
- LOJ 2249: 洛谷 P2305: 「NOI2014」购票
题目传送门:LOJ #2249. 题意简述: 有一棵以 \(1\) 号节点为根节点的带边权的树. 除了 \(1\) 号节点的所有节点上都有人需要坐车到达 \(1\) 号节点. 除了 \(1\) 号节点 ...
- python3之安装、pip、setuptools
1.python3安装 下载地址:https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tgz #安装环境centOS 7 #安装依赖包: yum ...
- start-stop-daemon 启动停止系统守护进程
1.start-stop-daemon start-stop-daemon是一个Debian体系里的一个守护进程管理软件,可以用指定的用户启停软件.CentOS有自己的daemon()机制(在/etc ...
- Android sdk安装目录中没有platform-tools目录问题详解
sdk下载地址 http://tools.android-studio.org/index.php/sdk 安装步骤很简单,百度即可. 下面详细说一下,在安装中遇到android sdk下没有plat ...
- 公共语言运行库(CLR)开发系列课程(1):Pinvoke 简介 学习笔记
前言 让拖管代码对象和非托管对象协同工作的过程称为互用性(Interoperability),通常简称为 Interop. P/Invoke在托管代码与非托管代码交互式时产生一个事务(Transiti ...