本蒟蒻又双叒叕被爆踩辣!

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 【奶牛玩杂技】的更多相关文章

  1. 洛谷 P1842 奶牛玩杂技 题解

    P1842 奶牛玩杂技 题目背景 Farmer John 养了N(1<=N<=50,000)头牛,她们已经按1~N依次编上了号.FJ所不知道的是,他的所有牛都梦想着从农场逃走,去参加马戏团 ...

  2. [洛谷P1842] 奶牛玩杂技

    题目类型:贪心+证明,经典题 传送门:>Here< 题意:有\(N\)头奶牛,每个奶牛有一个重量\(W[i]\),力量\(S[i]\).定义每个奶牛的压扁程度为排在它前面的所有奶牛的总量之 ...

  3. p1842 奶牛玩杂技 题解

    感觉其他dalao讲的不是很明白啊,我这样的蒟蒻看不懂啊. 在luogu这个dalao遍地的地方我蒟蒻看个题解也不明白,我为跟我同病相怜的蒟蒻写一篇吧 其实真是不太明白,大部分题解都是只说 体重大的在 ...

  4. 洛谷 题解 UVA572 【油田 Oil Deposits】

    这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...

  5. 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)

    必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...

  6. 洛谷题解P4314CPU监控--线段树

    题目链接 https://www.luogu.org/problemnew/show/P4314 https://www.lydsy.com/JudgeOnline/problem.php?id=30 ...

  7. 洛谷 P2858 [USACO06FEB]奶牛零食Treats for the Cows 题解

    P2858 [USACO06FEB]奶牛零食Treats for the Cows 题目描述 FJ has purchased N (1 <= N <= 2000) yummy treat ...

  8. 题解【[USACO05NOV]奶牛玩杂技】

    \[ \texttt{Description} \] 有 \(n\) 头牛,每头牛都有自己的体重 \(W_i\) 和力量 \(S_i\) . 将这 \(n\) 头牛摞在一起,每头牛的压扁指数定义为:压 ...

  9. 洛谷 P2858 [USACO06FEB]奶牛零食Treats for the Cows

    题目描述 FJ has purchased N (1 <= N <= 2000) yummy treats for the cows who get money for giving va ...

随机推荐

  1. lrd 模拟 总结

    觉得是时候总结一下达哥的考试了!达哥的考试我就没有考好过,就之前达哥的考试都是人家ak我爆零,然后这次也不例外,我总是想在考场上尝试一些新的东西,其实就是作死行为,有的时候这种行为可以为我带来收益但是 ...

  2. L1与L2正则化的对比及多角度阐述为什么正则化可以解决过拟合问题

    正则化是一种回归的形式,它将系数估计(coefficient estimate)朝零的方向进行约束.调整或缩小.也就是说,正则化可以在学习过程中降低模型复杂度和不稳定程度,从而避免过拟合的危险. 一. ...

  3. PHP 导出微信公众号粉丝的方法

    PHP 导出微信公众号粉丝的方法 先 user/get 获取关注者列表 然后user/info 根据openid读取信息 以上方法认证的订阅号支持

  4. Tomcat开启关闭常见问题

    启动 bin/startup.bat ,双击运行该文件即可 访问:浏览器输入: http://localhost:8080 回车访问自己 http://别人的ip:8080 访问别人 可能出现的问题: ...

  5. .NET Core前后端分离快速开发框架(Core.3.0+AntdVue)

    .NET Core前后端分离快速开发框架(Core.3.0+AntdVue) 目录 引言 简介 环境搭建 开发环境要求 基础数据库构建 数据库设计规范 运行 使用教程 全局配置 快速开发 管理员登录 ...

  6. 详解Vue 方法与事件处理器

      本篇文章主要介绍了详解Vue 方法与事件处理器 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 方法与事件处理器 方法处理器 可以用 v-on 指令监听 DOM 事件 ...

  7. C++中对封装的语法支持——友元

    友元 1.友元就是授权给某个函数.每个成员函数.某个类具有访问类内部私有成员的权限. 2.为什么用友元?友元可以允许某个类.函数直接访问类内部私有数据,减少函数调用开销,提高效率. 3.友元函数不是成 ...

  8. ThinkPHP 6.0 管道模式与中间件的实现分析

    设计模式六大原则 开放封闭原则:一个软件实体如类.模块和函数应该对扩展开放,对修改关闭. 里氏替换原则:所有引用基类的地方必须能透明地使用其子类的对象. 依赖倒置原则:高层模块不应该依赖低层模块,二者 ...

  9. python--几种快速排序的实现以及运行时间比较

    快速排序的基本思想:首先选定一个数组中的一个初始值,将数组中比该值小的放在左边,比该值大的放在右边,然后分别对左边的数组进行如上的操作,对右边的数组进行如上的操作.(分治+递归) 1.利用匿名函数la ...

  10. 力扣(LeetCode)旋转字符串 个人题解

    给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转操作之后,A 能变成B ...