洛谷 题解 P1842 【奶牛玩杂技】
本蒟蒻又双叒叕被爆踩辣!
Solution:
我们先看数据,50000,那么O(n)或者O(n log(n))是可以过的,非严格O(n * sqrt(n))要卡卡常,说不定也可以过。
那么什么算法可以在解决这道题的同时来达到期望复杂度嘞?
你的任务就是帮助奶牛们找出一个摞在一起的顺序,使得总压扁指数最小。
看到这句是不是感觉明白了什么?
是的,很明显就是贪心!期望复杂度O(n);
那么贪心策略是什么?
因为我们要求总压扁指数最小,那么我们先看看总压扁指数是如何求的?
它是与奶牛的体重有关?
还是与奶牛的力量有个?
对于任意的牛,她的压扁指数等于摞在她上面的所有奶牛的总重(当然不包括她自己)减去它的力量
看到这句话是不是都懂了,它与奶牛的体重以及力量都有关!
而且,因为我们要越高的奶牛的体重越小且力量越小。
又因为,s和w直接的转化比率是1:1(就是一单位的体重可以用一单位的力量来支撑
那么我们的贪心策略就是按照s + w来排序;
上面是对问题的感性理解,
接下来,我来讲一讲如何证明为什么要越高的奶牛的体重越小且力量越小(显然啊:
假设x, y为相邻的奶牛,
且 Wx + Sx < Wy + Sy;
那么 Wx - Sy < Wy-Sx;
那么显然是右边的情况更优,窝们就应该把x放在上面,y在下面。
那么既然这里已经想通了,就很简单辣!
Code:
#include<bits/stdc++.h>
using namespace std;
#define maxn 50010
#define inf 1000000000
#define Rep(x, a, b) for(int x = a; x <= b; ++ x)
#define Dep(x, a, b) for(int x = a; x >= b; -- x)
struct node{
int w, s, sum;
}e[maxn];//w,s如题,sum是w+s;
int n, ans = -inf, now;//ans要赋极小值。
bool cmp(node x, node y){
return x.sum < y.sum;
}//按w+s排序。
int main(){
scanf("%d", &n);//输入
Rep(i, 1, n){
scanf("%d%d", &e[i].w, &e[i].s);//输入
e[i].sum = e[i].w + e[i].s;//求出结构体排序的条件
now += e[i].w;//先全部加起来,方便从倒叙求解
}
sort(e + 1, e + n + 1, cmp);//按照贪心方案,从小往大排序!
Dep(i, n, 1){//记得要倒序!
now -= e[i].w;//在减去w
ans = max(now - e[i].s, ans);//求出ans最大,此时使得总压扁指数最小
}
printf("%d", ans);//输出
return 0;
}
Ps:请看懂再抄
洛谷 题解 P1842 【奶牛玩杂技】的更多相关文章
- 洛谷 P1842 奶牛玩杂技 题解
P1842 奶牛玩杂技 题目背景 Farmer John 养了N(1<=N<=50,000)头牛,她们已经按1~N依次编上了号.FJ所不知道的是,他的所有牛都梦想着从农场逃走,去参加马戏团 ...
- [洛谷P1842] 奶牛玩杂技
题目类型:贪心+证明,经典题 传送门:>Here< 题意:有\(N\)头奶牛,每个奶牛有一个重量\(W[i]\),力量\(S[i]\).定义每个奶牛的压扁程度为排在它前面的所有奶牛的总量之 ...
- p1842 奶牛玩杂技 题解
感觉其他dalao讲的不是很明白啊,我这样的蒟蒻看不懂啊. 在luogu这个dalao遍地的地方我蒟蒻看个题解也不明白,我为跟我同病相怜的蒟蒻写一篇吧 其实真是不太明白,大部分题解都是只说 体重大的在 ...
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
- 洛谷题解P4314CPU监控--线段树
题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...
- 洛谷 P2858 [USACO06FEB]奶牛零食Treats for the Cows 题解
P2858 [USACO06FEB]奶牛零食Treats for the Cows 题目描述 FJ has purchased N (1 <= N <= 2000) yummy treat ...
- 题解【[USACO05NOV]奶牛玩杂技】
\[ \texttt{Description} \] 有 \(n\) 头牛,每头牛都有自己的体重 \(W_i\) 和力量 \(S_i\) . 将这 \(n\) 头牛摞在一起,每头牛的压扁指数定义为:压 ...
- 洛谷 P2858 [USACO06FEB]奶牛零食Treats for the Cows
题目描述 FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving va ...
随机推荐
- ElasticSearch(一):基本概念
ElasticSearch(一):基本概念 学习课程链接<Elasticsearch核心技术与实战> 基本概念示意图 索引与文档更偏向于开发人员的视角,属于逻辑上的一种概念:节点与分片更偏 ...
- SpringBoot之ActiveMQ实现延迟消息
一.安装activeMQ 安装步骤参照网上教程,本文不做介绍 二.修改activeMQ配置文件 broker新增配置信息 schedulerSupport="true" & ...
- PHP 导出微信公众号粉丝的方法
PHP 导出微信公众号粉丝的方法 先 user/get 获取关注者列表 然后user/info 根据openid读取信息 以上方法认证的订阅号支持
- php charles 使用方法
php charles 使用方法 打开charles 点击help菜单点击local ip address 可以获取本地ip 手机上选择代理这个ip 端口8888 然后手机访问网页 charles会弹 ...
- 201871010114-李岩松《面向对象程序设计(java)》第十周学习总结
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
- Ubuntu 16.04安装JDK并配置环境变量
系统版本:Ubuntu 16.04 JDK版本:jdk1.8.0_121 1.官网下载JDK文件jdk-8u121-linux-x64.tar.gz 我这里下的是最新版,其他版本也可以 2.创建一个目 ...
- MySQL如何永久解决由dos编码格式导致MySQ的显示乱码
MySQL如何永久解决由dos编码格式导致MySQ的显示乱码 Ⅰ.新建文件 changeCode.txt Ⅱ.粘贴下面代码(作用:将默认的GBK(936)修改为UTF-8(65001)) Window ...
- 创建sql自定义的函数及商品分页sql存储过程
--商品筛选时判断品牌ID是否存在 --select dbo.isValite(94,94)create function isValite(@brandId int,@bId int)returns ...
- ACE框架 基于共享内存的分配器
ACE框架提供了一个内存分配器模板,并且提供了(仅且)一个模板实例,基于共存内存的内存分配器.这个共存内存分配器模板实例在ACE框架应用于,基于内存映射的进程通讯,以及进程间同步等. ACE内存分配器 ...
- 《算法导论中文版》PDF 下载
电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 在有关算法的书中,有一些叙述非常严谨,但不够全面:另一些涉及了大量的题材,但又缺乏严谨性.本书将严谨性和全面性融为 ...