AOJ.867 排队出发

本文介绍了一道关于神牛岛之旅的算法题目,旨在寻找最优排列方式以减少参与者的心理创伤。输入包括学生的数量及其影响力和承受力,通过特定算法计算得到最小创伤值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


Time Limit: 1000 ms   Memory Limit: 50 MB
Total Submission: 17   Submission Accepted: 6
Judge By Case
Description
神牛岛是传说中的一个岛屿,凡是成功到那里游历,完成探险并返回的人,都会成为神
牛。但是,现实中却没有人知道如何到达神牛岛。
这天夜里,笃志者睡着之后,不久就进入了梦乡。他突然看到有人在问,“有人想去神
牛岛的吗?”神牛岛之旅的牌子前,就开始有不少勇士报名要去冒险探索。
“我们会把勇士安排在前,带领大家一起去神牛岛。下面开始点名!”管理队伍的 LXY 神
牛说。其实说实话,给学生排队这种工作是最让神牛头疼的了。因为同学们都有自尊心,都
不愿意排后面。共有 n 个同学要排成一列,每个同学有两个属性:影响力和承受能力。给
一个同学造成的心理创伤指数等于所有在他前面同学的影响力之和减去他的承受能力。现在
请你帮忙安排一下点名顺序,尽量使受到心理创伤最大的同学少受创伤。

Input
输入包含 n+1 行:
第 1 行是整数 n,表示同学的个数。
第 2~n+1 行每行两个自然数,分别是该同学的影响力和承受能力。

Output
输出包含 1 行,为你安排的顺序中受到心理创伤最大的同学受到的创
伤。

Sample Input
OriginalTransformed
3
10 3
2 5
3 3
3[EOL] 
10[SP]3[EOL] 
2[SP]5[EOL] 
3[SP]3[EOF] 

Sample Output
OriginalTransformed
2
2[EOL] 
[EOF] 

Hint
【数据规模】
对于 100%的数据, 1<=n<=50000, 1<=影响力<=10000, 1<=承受能力<=1,000,000,000。

这题比赛的时候我是没办法,后面看汪神的推导,代码倒是不难
#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
//#define DEBUG
const int maxn =50050,INF=1e9+1;

using namespace std;
struct lingfly {
	long long x, y;
	bool operator < (const lingfly& b)const {
		return x + y < b.x + b.y;
	}
};
lingfly a[maxn];
int main() {
#ifdef DEBUG
	freopen("Text.txt", "r", stdin);
#endif // DEBUG
	int n;
	while (scanf("%d", &n) != EOF) {
		int i, j;
		long long sum = 0,ans=-INF;
		for (i = 0; i < n; i++)
			scanf("%lld %lld", &a[i].x, &a[i].y);
		sort(a, a + n);
		for (i = 0; i < n; i++) {
			
			ans = max(ans, sum - a[i].y);
			sum += a[i].x;
		}
		//cout << sum << endl;
		//cout << a[n - 1].y << endl;
		printf("%lld\n", ans);
	}
	
	
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值