2019牛客暑期多校训练营(第七场)-C Governing sand
题目链接:https://ac.nowcoder.com/acm/contest/887/C
题意:有n种树,给出每种数的高度、移除的花费和数量,求最小花费是多少使得剩下树中最高的树的数量占一半以上。
思路:先按高度值进行排序,暴力枚举以哪种树为最高的树,对每次选择,要将高度值大于该树的其它树全砍掉,这个可以O(n)预处理得到。然后要砍掉高度值小于该树中的花费最小的一些树使得满足条件,注意到c<=200,那么可以保存每种花费的树的个数,从1到200枚举出需要移除的数量的最小花费即可。
AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
using namespace std; const int maxn=1e5+;
typedef long long LL;
int n;
LL ans,num[maxn],C[],pre,aft[maxn];
struct node{
LL h,c,p;
}a[maxn]; inline LL read(){
LL x=,f=;char ch=;
while(!isdigit(ch)) {f|=ch=='-';ch=getchar();}
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return f?-x:x;
} bool cmp(node x,node y){
return x.h<y.h;
} LL cal(LL x){
LL res=;
for(int i=;i<=;++i){
if(C[i]>=x){
res+=i*x;
break;
}
else{
res+=i*C[i];
x-=C[i];
}
}
return res;
} int main(){
while(~scanf("%d",&n)){
ans=0x3f3f3f3f3f3f3f3f;
memset(C,,sizeof(C));
for(int i=;i<=n;++i)
a[i].h=read(),a[i].c=read(),a[i].p=read();
sort(a+,a+n+,cmp);
aft[n]=;
for(int i=n-;i>=;--i)
aft[i]=aft[i+]+a[i+].c*a[i+].p;
int j;
for(int i=;i<=n;i=j){
LL t1=a[i].p;
num[i]=num[i-]+a[i].p;
for(j=i+;j<=n&&a[j].h==a[i].h;++j){
num[j]=num[j-]+a[j].p;
t1+=a[j].p;
}
LL tmp=num[j-]-*t1+;
if(tmp<=)
pre=;
else
pre=cal(tmp);
for(int k=i;k<j;++k)
C[a[k].c]+=a[k].p;
ans=min(ans,pre+aft[j-]);
}
printf("%lld\n",ans);
}
return ;
}
2019牛客暑期多校训练营(第七场)-C Governing sand的更多相关文章
- 2019牛客暑期多校训练营(第九场)A:Power of Fibonacci(斐波拉契幂次和)
题意:求Σfi^m%p. zoj上p是1e9+7,牛客是1e9: 对于这两个,分别有不同的做法. 前者利用公式,公式里面有sqrt(5),我们只需要二次剩余求即可. 后者mod=1e9,5才 ...
- 2019牛客暑期多校训练营(第一场)A题【单调栈】(补题)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 题目描述 Two arrays u and v each with m distinct elem ...
- 2019牛客暑期多校训练营(第一场) B Integration (数学)
链接:https://ac.nowcoder.com/acm/contest/881/B 来源:牛客网 Integration 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 5242 ...
- 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第一场)A Equivalent Prefixes(单调栈/二分+分治)
链接:https://ac.nowcoder.com/acm/contest/881/A来源:牛客网 Two arrays u and v each with m distinct elements ...
- [状态压缩,折半搜索] 2019牛客暑期多校训练营(第九场)Knapsack Cryptosystem
链接:https://ac.nowcoder.com/acm/contest/889/D来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...
- 2019牛客暑期多校训练营(第二场)J-Subarray(思维)
>传送门< 前言 这题我前前后后看了三遍,每次都是把网上相关的博客和通过代码认真看了再思考,然并卵,最后终于第三遍也就是现在终于看懂了,其实懂了之后发现其实没有那么难,但是的的确确需要思维 ...
- 2019牛客暑期多校训练营(第一场)-A (单调栈)
题目链接:https://ac.nowcoder.com/acm/contest/881/A 题意:给定两个长度均为n的数组a和b,求最大的p使得(a1,ap)和(b1,bp)等价,等价的定义为其任意 ...
- 2019牛客暑期多校训练营(第一场)A - Equivalent Prefixes(单调栈)
题意 给定两个$n$个元素的数组$a,b$,它们的前$p$个元素构成的数组是"等价"的,求$p$的最大值."等价"的意思是在其任意一个子区间内的最小值相同. $ ...
随机推荐
- SQL Server 基础:ADO.NET
序言 Connection 主要提供与数据库的连接功能 Command 用于返回数据.修改数据.运行存储过程以及发送或检索参数信息的数据库命令 CommandType 获取或设置Command对象要执 ...
- [Luogu] 子串
https://www.luogu.org/problemnew/show/P2679 DP f(k,i,j)f(k,i,j)表示分了k段,用了第一个串中的前i个数字,已经构成了第二个串的前j个的方案 ...
- 【poj1733】Parity game--边带权并查集
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15776 Accepted: 5964 Description Now ...
- 【线性代数】3-5:独立性,基和维度(Independence,Basis and Dimension)
title: [线性代数]3-5:独立性,基和维度(Independence,Basis and Dimension) categories: Mathematic Linear Algebra ke ...
- 7.13 T2 Shit 题(shit)
[题目描述] 某一天,小
- shell tail 命令
#显示最后两行 tail -n - filename > newfilename #从开头显示到倒数第二行 head -n - filename > newfilename
- heartrbeat实现web服务器高可用
今天的内容是用heartbeat实现web服务器高可用 一.简介: heartbeat的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行 ...
- 利用简易爬虫完成一道基础CTF题
利用简易爬虫完成一道基础CTF题 声明:本文主要写给新手,侧重于表现使用爬虫爬取页面并提交数据的大致过程,所以没有对一些东西解释的很详细,比如表单,post,get方法,感兴趣的可以私信或评论给我.如 ...
- JVM----Class类文件结构
JVM平台无关性 Java具有平台无关性,也就是任何操作系统都能运行Java代码.之所以能实现这一点,是因为Java运行在虚拟机之上,不同的操作系统都拥有各自的Java虚拟机,因此Java能实现“一次 ...
- Netfilter 之 钩子函数注册
通过注册流程代码的分析,能够明确钩子函数的注册流程,理解存储钩子函数的数据结构,如下图(点击图片可查看原图): 废话不多说,开始分析: nf_hook_ops是注册的钩子函数的核心结构,字段含义如下所 ...