洛谷 题解 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 ...
随机推荐
- 期末考试(正解:三分单峰函数 me~)
好久没有水过杂题了! 今天lsc终于刚过了三道考试题来水杂题了! 期末考试 首先一看还是一脸mb(这是正常现象,毕竟我不像一些大神可以一眼出正解)然后我就被颓了标签,知道是三分单峰函数,但是自己实在是 ...
- 从 DevOps 到 Serverless:通过“不用做”的方式解决“如何更高效做”的问题
作者 | 徐进茂(罗离) JAVA 开发工程师 导读:近年来,Serverless 一词越来越热,它已经逐渐成为了一种新型的软件设计架构.和 DevOps 概念提倡的是通过一系列工具和自动化的技术来 ...
- tap事件封装
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8 ...
- JavaScript 弹出框:警告(alert)、确认(confirm)的简单写法
onclick="javascript:return window.confirm('message')"
- [LC]111题 二叉树的最小深度 (递归)
①题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,20,null,null,15 ...
- java编程思想第四版第七章总结
1. 实现类的复用通常有两种方式 组合:在新的类中产生现有类的对象 继承:按照现有类的类型来创造新类 2. 一个特殊的方法toString() 在非基本类型的对象中, 都有toString()方法 当 ...
- hdu 1874 畅通工程续 (dijkstra(不能用于负环))
畅通工程续Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
- codeblocks 调试
codeblocks 调试工具使用的注意事项: 1.codebloccks 调试,必须要在一个项目下才可以,也就是说“单独的文件是不能运行debug工具的” 2.项目的目录文件名必须是全英文,同时文件 ...
- MATLAB相机标定转XMl代码
function writeXML(cameraParams,file) %writeXML(cameraParams,file) %功能:将相机校正的参数保存为xml文件 %输入: %cameraP ...
- Win10专业版和企业版的区别
微软最新的Windows 10版本诸多,包括精简版(S).家庭版(Home).专业版(Pro).企业版(Enterprise),而论功能体验,Win10专业版和企业版无疑是最完善的.那么,Win10专 ...