Mint水题解第二篇:耍杂技的牛

Mint工作室出品


题目描述

农民约翰的N头奶牛(编号为1…N)计划逃跑并加入马戏团,为此它们决定练习表演杂技。

奶牛们不是非常有创意,只提出了一个杂技表演:

叠罗汉,表演时,奶牛们站在彼此的身上,形成一个高高的垂直堆叠。

奶牛们正在试图找到自己在这个堆叠中应该所处的位置顺序。

这N头奶牛中的每一头都有着自己的重量Wi以及自己的强壮程度Si。

一头牛支撑不住的可能性取决于它头上所有牛的总重量(不包括它自己)减去它的身体强壮程度的值,现在称该数值为风险值,风险值越大,这只牛撑不住的可能性越高。

您的任务是确定奶牛的排序,使得所有奶牛的风险值中的最大值尽可能的小。

输入格式

第一行输入整数N,表示奶牛数量。

接下来N行,每行输入两个整数,表示牛的重量和强壮程度,第i行表示第i头牛的重量Wi以及它的强壮程度Si。

输出格式

输出一个整数,表示最大风险值的最小可能值。

样例

样例输入
3
10 3
2 5
3 3
样例输出
2

数据范围与提示

1≤N≤50000,

1≤Wi≤10,000,

1≤Si≤1,000,000,000


我们可以轻易地看出这道题是一道经典贪心题,感觉跟以前的就是一个模板刻出来的(我没有说模板题哈)

另外提一嘴:
珍爱生命,远离叠罗汉

于是,我天真地开启了我的第一次尝试:

#include 
#include 
#include 
#include 
#include 
using namespace std;
#define MAXN 50005 
int n, ans;
struct cow {
    int w, s, sum;
}a[MAXN];

bool cmp(cow x, cow y) {
	if (x.sum > y.sum or (x.sum == y.sum and x.w > y.w))//排序标准
		return 0;
	return 1;
}

int main() {
	std::ios::sync_with_stdio(false);//这是流加速器,让cin,cout的效率变得和标准输入输出一样
	cin >> n;
	for (int i = 1; i <= n; i ++) {
		cin >> a[i].w >> a[i].s;
		a[i].sum = a[i].w + a[i].s;//其实这个sum没啥用,只是我懒而已
	}
	sort(a + 1, a + 1 + n, cmp);
	int tot = 0;
	for (int i = 1; i <= n; i ++) {
		tot += a[i].w;//tot为目前牛的总质量
		ans = max(ans, tot - a[i].w - a[i].s);//tot - a[i].w - a[i].s即为风险值
	}
	cout << ans;
	return 0;
}

你看我对了吧哈哈

在这里插入图片描述

NOOOOOOO!!!

为什么错掉了(っ °Д °;)っ


咳咳咳,请遂其本,

数据范围与提示

1≤N≤50000,

1≤Wi≤10,000,

1≤Si≤1,000,000,000
你看你看,s比w大了这么多,既然风险值为w - s,那么肯定会有负数ans出现的啊

所以,请注意:
珍爱生命,远离数据


好了,最后就是我们的AC代码了:

#include 
#include 
#include 
#include 
#include 
using namespace std;
#define MAXN 50005 
int n, ans = -1e9;//真是阴!
struct cow {
    int w, s, sum;
}a[MAXN];

bool cmp(cow x, cow y) {
	if (x.sum > y.sum or (x.sum == y.sum and x.w > y.w))
		return 0;
	return 1;
}

int main() {
	std::ios::sync_with_stdio(false);
	cin >> n;
	for(int i = 1;i <= n; i ++) {
		cin >> a[i].w >> a[i].s;
		a[i].sum = a[i].w + a[i].s;
	}
	sort(a + 1, a + 1 + n, cmp);
	int tot = 0;
	for(int i = 1; i <= n; i ++) {
		tot += a[i].w;
		ans = max(ans, tot - a[i].w - a[i].s);
	}
	cout << ans;
	return 0;
}

最终,Mint水题解第二篇施工完毕,累死我了

听说点赞的人帅的一比哦

你可能感兴趣的:(Mint水题解,c++,算法,贪心算法)