题解 | 请客吃饭

请客吃饭

https://www.nowcoder.com/practice/4250a369235e414ba9128bb23ff4fcf5

#include <bits/stdc++.h>

using namespace std;

#define int long long
int ans = 1e9 + 5;			//最小隔阂
int maxhp = 0;				//最大愉悦

void solve()
{
	int n, k; cin >> n >> k;
	vector<pair<int,int>> a(n + 1,{0,0}), b(n + 1, {0,0});

	for (int i = 1; i <= n; i++)			//输入财富,second是下表
	{
		cin >> a[i].first;
		a[i].second = i;
	}
	for (int i = 1; i <= n; i++)			//输入愉悦值,second是下表
	{
		cin >> b[i].first;
		b[i].second = i;
	}
	sort(a.begin() + 1, a.begin() + 1 + n);	//按照财富排序

	vector<int> pre(n + 1, 0);
	for (int i = 1; i <= n; i++)			//财富排序后的愉悦值前缀和
	{
		int idx = a[i].second;
		pre[i] = b[idx].first + pre[i - 1];
	}
	int l = 1, r = 1;
	while (l <= n && r <= n)
	{
		int idxr = a[r].second, idxl = a[l].second;	//计算原始下表
		int hp = pre[r] - pre[l - 1];				//计算愉悦值
		if (hp < k)
		{
			r++;
		}
		else
		{
			if (hp >= maxhp)
				ans = min(ans, abs(a[r].first - a[l].first));	//更新最小隔阂
			else
				maxhp = hp;
			l++;
		}
	}
	if (ans == 1e9 + 5)
		cout << -1;
	else
		std::cout << ans << endl;
}
signed main()
{
	solve();
	return 0;
}

全部评论

相关推荐

01-09 11:18
门头沟学院 Java
作者先叠个甲:本人双非本,秋招拿到了多个大厂offer,这个过程也不容易,但是在看到很多秋招胜利之后说自己一路有多艰辛的文章,总感觉有一点不对劲,想了很久打算写一篇文章分析一下,本文仅代表作者观点,不认同的可以在评论区大家一起理性讨论。&nbsp;秋招已经结束,各类社交平台出现一大批“大厂上岸”胜利结算。文章的叙事逻辑高度相同,开篇就渲染焦虑和困惑,学习时的挑灯夜读、投递时的屡屡碰壁、面试时的如履薄冰,将过往经历包装成一步艰辛的“奋斗史”,然后最终以大厂offer的胜利结尾,字里行间全是苦尽甘来的优越感。但是在我看来,这类文章的本质是结果导向的、带有浮夸的叙事,因为其内核不是分享经验,而是借“苦难”之名...
创作小队长:你的批判视角非常犀利,尤其“结果决定叙事权”的洞察非常精准,哈哈想邀请你来成为我们的创作者🫰 但我想补充一个视角:许多分享者的初衷并非炫耀结果或者苦难,我更愿意相信他们在这个过程中付出了很多,在这场战役结束后,他们迫不及待地想被看到,记录和分享都是给自己的一个交代,而非真的教会别人什么,他们的初衷未必是想制造焦虑。求职市场的残酷、经济环境的下行、世俗价值观才是这种叙事流行的土壤,作为一个普通人无法抵抗洪流。 感谢你发起这场讨论。理想的社区,既需要这样锐利的批判来保持清醒,你的洞察非常犀利,也许会启发一些人,能逐渐改变这种叙事~
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务