题目链接:https://ac.nowcoder.com/acm/contest/887/C

题意:给出n种树和n个h[i],c[i],p[i]代表每种树的高度,砍掉一棵的花费,树的个数。现在要求砍掉一部分树,使得最高的树的个数大于总树木的一半。

数据范围:1<=n<=1e5,1<=Hi<=1e9,1<=Ci<=200,1<=Pi<=1e9

思路:首先,此题只能枚举每种树的高度让其作为最大值,那么我们可以排序后从低到高来枚举(因为数据1e9所以还有提前离散化一下),对于每次枚举一个高度时我们只需要把比他高的全部树木全部砍掉,并且在比他低的树木中砍掉那些花费最小的,使得当前树木个数大于所有树木的一半。比某棵树的高度高的那些树砍掉可以通过花费后缀和来得到,那么对于比某棵树低的花费怎么得到呢?我们观察到cost的范围是200,所以我们可以把cost当成下标,通过cost数组来记录每种花费的树的个数即可,那么找比某棵树小的那些花费的时候直接从1到200暴力砍掉那些花费小的树。复杂度是O(200*n)。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
ll sum[N],cost[205],h[N],num[N],nsum[N];
int n,m,t;
struct p{ll sum,cost,h;
}a[N];
vector<pair<ll,ll> >G[N];
int main(){while(~scanf("%d",&n)){for(int i=1;i<=n;i++){scanf("%lld%lld%lld",&a[i].h,&a[i].cost,&a[i].sum);sum[i]=num[i]=nsum[i]=cost[i]=0,h[i]=a[i].h,G[i].clear();}sort(h+1,h+n+1);ll tot=unique(h+1,h+n+1)-h-1,total=0;for(int i=1;i<=n;i++){a[i].h=lower_bound(h+1,h+tot+1,a[i].h)-h;sum[a[i].h]+=a[i].cost*a[i].sum;num[a[i].h]+=a[i].sum;total+=a[i].sum;G[a[i].h].push_back(make_pair(a[i].sum,a[i].cost));}sum[tot+1]=nsum[tot+1]=0;for(int i=tot;i>=1;i--)sum[i]+=sum[i+1],nsum[i]+=nsum[i+1]+num[i];ll ans=1ll<<62;for(int i=1;i<=tot;i++){ll ret=total-nsum[i]-num[i]+1,mon=0;if(ret>0){for(int j=1;j<=200;j++){if(ret>=cost[j]){ret-=cost[j];mon+=cost[j]*j;}else{mon+=ret*j;break;}}}ans=min(ans,sum[i+1]+mon);int len=G[i].size();for(int j=0;j<len;j++)cost[G[i][j].second]+=G[i][j].first;}printf("%lld\n",ans);}return 0;
}

2019牛客暑假多校训练赛第七场C Governing sand(暴力)相关推荐

  1. 2019牛客暑假多校训练 第四场 triples I 按位或运算

    链接:https://ac.nowcoder.com/acm/contest/884/D 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  2. 2019牛客暑期多校训练营(第七场)A String(暴力)

    链接:https://ac.nowcoder.com/acm/contest/887/A 来源:牛客网 题目描述 A string is perfect if it has the smallest ...

  3. 2019牛客暑期多校训练营(第七场)D Number(思维)

    链接:https://ac.nowcoder.com/acm/contest/887/D 来源:牛客网 题目描述 I have a very simple problem for you. Given ...

  4. 2019牛客暑期多校训练营(第七场)J A+B problem

    链接:https://ac.nowcoder.com/acm/contest/887/J 来源:牛客网 题目描述 Reversed number is a number written in arab ...

  5. 暑假N天乐【比赛篇】 —— 2019牛客暑期多校训练营(第七场)

    以下题解包括:\(A \ \ \ B \ \ \ C \ \ \ D \ \ \ E \ \ \ J\) 另:\(H[Pair]数位dp \ 待补\) 毕竟我还不会 比赛地址: https://ac. ...

  6. 2019牛客暑期多校训练营(第七场)

    Problem A 题意: 题解: C++版本一 Problem B 题意: 题解: C++版本一 Problem C 题意: 题解: C++版本一 Problem D 题意: 题解: C++版本一 ...

  7. 2019牛客暑期多校训练营(第七场)-C Governing sand

    题目链接:https://ac.nowcoder.com/acm/contest/887/C 题意:有n种树,给出每种数的高度.移除的花费和数量,求最小花费是多少使得剩下树中最高的树的数量占一半以上. ...

  8. 2019牛客暑期多校训练营(第七场)D Number——实系数多项式因式分解定理

    前置知识 代数基本定理 定理:每个次数 ≥ 1 复系数多项式在复数域中至少有一个跟. 由此推出,n次复系数多项式方程在复数域内有且只有n个根(重根按重数计算).(只要不断把多项式除以(x-xa),即可 ...

  9. 2019牛客暑期多校训练营(第七场)-B Irreducible Polynomial(多项式因式分解)

    题目链接:https://ac.nowcoder.com/acm/contest/887/B 题意:给定整系数多项数,判断实数域上是否可约. 思路: AC代码: #include<cstdio& ...

最新文章

  1. Aurora的安装和中文配置
  2. 谷歌开放的TensorFlow Object Detection API 效果如何?对业界有什么影响
  3. C++/C的文件结构
  4. C# 将\u1234类型的字符转化成汉字
  5. HDU 5514 Frogs (容斥原理+因子分解)
  6. (五十九)iOS网络基础之UIWebView简易浏览器实现
  7. 【转】自旋锁-SpinLock(.NET 4.0+)
  8. Centos 7 GCC 7.3编译器安装方法及C++17标准测试示例
  9. angular-数据绑定的最佳实践
  10. 【车联网】一文了解5G在车联网中的应用
  11. 有时间同情渣男傻女,不如想想人都是怎么被臆想出来的爱情给坑了
  12. 关于C#传给视图的字符串带有Html转义字符的处理
  13. 瀑布流JavaScript
  14. Focus Stacking
  15. 学会写出"图形界面+数据库"的程序要多长时间?
  16. win10字体显示Mac效果+Chrome字体效果增强
  17. 基于CCII+的电流模式二阶带通滤波器仿真
  18. 流水线上的农民:我在工厂种蔬菜
  19. 传奇源码分析-服务器端(SelGate服务器分析)
  20. 2010年最具影响十大技术:移动互联…

热门文章

  1. kali与Windows10双系统
  2. 为什么取大地为0电势(电位)
  3. 一波回忆杀,这个网站可以让我玩上一整天!
  4. L32.linux命令每日一练 -- 第五章 Linux信息显示与搜索文件命令 -- dmesg和stat
  5. 机器码计算机如何获取,怎么样获得计算机的机器码?
  6. 分享几个实用性爆棚的网站,快放进收藏夹里吃灰吧!(三)
  7. L1-085 试试手气(15分)(C语言)
  8. 将Excel表的数据导入mysql
  9. js编码解码一个蛮有意思的事
  10. 中南大学计算机学院 吴嘉,中南大学要求老师打分服从正态分布?考试中心:没有明确规定...