列表

详情


NC229311. 采集灵石

描述

牛牛打开了一个有趣的游戏。在游戏中,灵石是一种非常重要的资源。每位玩家每天有且仅有一次采集的机会。
灵石会在许多浮岛上刷新,每个浮岛上灵石刷新数量可能不同。这些浮岛之间通过传送法阵相连,激活每个岛屿上的传送法阵花费的灵石数量也不同。玩家可以耗费  块灵石从任意一个其他浮岛或初始平台前往第  个浮岛。采集完毕后玩家可以从任何浮岛直接退出地图。
现在,牛牛手中有着  块灵石,他想知道自己今天采集结束后最多能拥有多少块灵石。牛牛只能在周末玩一小时游戏,他希望你能编写一个程序帮他及时算出来。

输入描述

第一行两个正整数  分别表示浮岛的数量和牛牛手中初始的灵石数量。

接下来  行,每行两个正整数,第  行的正整数  表示第  个浮岛上今日刷新的灵石数量, 表示传送到第  个浮岛所需的灵石数量。

输出描述

一个正整数,表示牛牛今天采集后最多能拥有的灵石数量。

示例1

输入:

3 5
4 3
4 3
4 3

输出:

8

示例2

输入:

2 1
5 2
8 2

输出:

1

示例3

输入:

2 6
2 3
4 3

输出:

7

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 69ms, 内存消耗: 1144K, 提交时间: 2021-10-19 15:47:15

#include<bits/stdc++.h>
using namespace std;
const int N=1e6+9;
struct v
{
	int a,b;
}a[N];int n,k;
int p(v x,v y)
{
	return x.b<y.b;
}int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	    cin>>a[i].a>>a[i].b;
	sort(a+1,a+n+1,p);
	for(int i=1;i<=n;i++)
	    if(a[i].a>a[i].b&&a[i].b<=k)k+=a[i].a-a[i].b;
	cout<<k;
}

上一题