题意

有 $n$ 种树,每种树都有高度 $H_i$,费用 $C_i$,数量 $P_i$,现要砍掉一些树,使得剩下的树中最高的树的数量超过一般,求最小的费用。($1 \leq n \leq 10^5, \ 1 \leq H_i \leq 10^9, \ 1 \leq C_i \leq 200, \ 1 \leq  P_i \leq 10^9$)

分析

首先,容易想到我们应该枚举最高树的高度,将更高的全部砍掉,再从低的中选取k个费用最小的砍掉。

重点在于如何求出当前最小费用的k个。

注意到 $C_i$ 的范围非常小,所以我们可以统计费用为 $i$ 的树的个数,记为 $C[i]$(相当于建立200个桶)。

按高度从低到高排好序,遍历一遍,得到全局最小费用。复杂度为 $O(200n)$,如果二分查找就能做到 $O(log200\cdot n)$.

#include<bits/stdc++.h>
using namespace std;
#define LL long long
struct tree{
LL h,c,p;
}a[];
bool cmp(tree a,tree b){
return a.h<b.h;
}
LL n;
LL tmp=,ans=,tot=;
LL num[];
int main(){
while(cin>>n){
memset(num,,sizeof(num));
ans=tmp=tot=;
for(LL i=;i<n;++i){
scanf("%lld%lld%lld",&a[i].h,&a[i].c,&a[i].p);
tmp+=a[i].c*a[i].p;
}
ans=tmp;
sort(a,a+n,cmp);
for(LL i=,j;i<n;i=j){
j=i;while(a[j].h==a[i].h&&j<n)++j;
LL sum=;
LL cost=;
for(LL t=i;t<j;++t){
tmp-=a[t].c*a[t].p;
tot+=a[t].p;
sum+=a[t].p;
}
sum=tot-sum*+;
for(LL w=;sum>;++w){
if(num[w]<=sum){
cost+=w*num[w];
sum-=num[w];
}else{
cost+=sum*w;
break;
}
}
ans=min(ans,cost+tmp);
for(LL t=i;t<j;++t){
num[a[t].c]+=a[t].p;
}
}
cout<<ans<<endl;
}
}

参考链接:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=41065020

2019牛客多校C Governing sand——桶&&思维题的更多相关文章

  1. 2019牛客多校D move——乱搞&&思维题

    题意 给定 $n$ 个物品,体积分别为 $v_i$,现有 $K$ 的容积一样的箱子,按如下策略装入物品:每次选取尽可能大的装入(较大的不能装入时可以向小的找),依次装入箱子. 分析 首先,不具有严格的 ...

  2. 2019牛客多校第一场 I Points Division(动态规划+线段树)

    2019牛客多校第一场 I Points Division(动态规划+线段树) 传送门:https://ac.nowcoder.com/acm/contest/881/I 题意: 给你n个点,每个点有 ...

  3. 2019牛客多校第二场 A Eddy Walker(概率推公式)

    2019牛客多校第二场 A Eddy Walker(概率推公式) 传送门:https://ac.nowcoder.com/acm/contest/882/A 题意: 给你一个长度为n的环,标号从0~n ...

  4. 2019牛客多校第八场 F题 Flowers 计算几何+线段树

    2019牛客多校第八场 F题 Flowers 先枚举出三角形内部的点D. 下面所说的旋转没有指明逆时针还是顺时针则是指逆时针旋转. 固定内部点的答案的获取 anti(A)anti(A)anti(A)或 ...

  5. 牛客多校第3场 J 思维+树状数组+二分

    牛客多校第3场 J 思维+树状数组+二分 传送门:https://ac.nowcoder.com/acm/contest/883/J 题意: 给你q个询问,和一个队列容量f 询问有两种操作: 0.访问 ...

  6. 2019牛客多校 Round4

    Solved:3 Rank:331 B xor 题意:5e4个集合 每个集合最多32个数 5e4个询问 询问l到r个集合是不是都有一个子集的xor和等于x 题解:在牛客多校第一场学了线性基 然后这个题 ...

  7. 2019牛客多校第七场C-Governing sand(线段树+枚举)

    Governing sand 题目传送门 解题思路 枚举每一种高度作为最大高度,则需要的最小花费的钱是:砍掉所有比这个高度高的树的所有花费+砍掉比这个高度低的树里最便宜的m棵树的花费,m为高度低的里面 ...

  8. 2019牛客多校第一场E ABBA(DP)题解

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 ABBA 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语 ...

  9. 2019牛客多校第四场 I题 后缀自动机_后缀数组_求两个串de公共子串的种类数

    目录 求若干个串的公共子串个数相关变形题 对一个串建后缀自动机,另一个串在上面跑同时计数 广义后缀自动机 后缀数组 其他:POJ 3415 求两个串长度至少为k的公共子串数量 @(牛客多校第四场 I题 ...

随机推荐

  1. ROS下gazebo打开出现问题

    通常情况下,在装完ros后,打开gazebo, 会出现无法连接服务器获取模型的情况.这样,我们打开gazebo, 终端会提示timeout,gazebo界面没有网格. 这是因为服务器网站地址好像已经换 ...

  2. C#传递参数调用exe程序

    今天公司让我把Winform程序里的一块单独成一个exe文件,从原程序中打开新的exe程序,这就涉及到参数的传递,故来记录下传递参数到exe程序的方式 第一种方式 首先在程序A中添加引用using S ...

  3. find程序实现

    一个简单的查找字符串匹配 #include <stdio.h> #include <string.h> #define MAXLINE 1000 int getline(cha ...

  4. jq获取元素偏移量offset()

    解释: 1 获取匹配元素在当前视口的相对偏移. 2 返回的对象包含两个整型属性:top 和 left demo1: 获取top与left var aaa = $(".aaa "); ...

  5. Nomogram(诺莫图) | Logistic、Cox生存分析结果可视化

    本文首发于“生信补给站”公众号,https://mp.weixin.qq.com/s/BWpy3F-nEKXCdVXmY3GYZg 当然还有更多R语言,生物信息学相关知识...

  6. (二)第一个mybatis项目

    1. 引包 本例中使用maven构造项目,所以只需配置依赖即可引相应的包. pom.xml <project xmlns="http://maven.apache.org/POM/4. ...

  7. Java ShellSort

    Java ShellSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternational ...

  8. Java HeapSort

    Java HeapSort /** * <html> * <body> * <P> Copyright 1994-2018 JasonInternational & ...

  9. Windows 服务 安装后自启动

    [RunInstaller(true)] public partial class ProjectInstaller : System.Configuration.Install.Installer ...

  10. SQLAlchemy 在查询期间丢失与MySQL服务器的连接

    遇到问题 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query') 建立的 pymysq ...