[CF从零单排#20] 【结构体+排序】230A - Dragons

题目来源:http://codeforces.com/problemset/problem/230/A

Kirito is stuck on a level of the MMORPG he is playing now. To move on in the game, he's got to defeat all n dragons that live on this level. Kirito and the dragons have strength, which is represented by an integer. In the duel between two opponents the duel's outcome is determined by their strength. Initially, Kirito's strength equals s.

If Kirito starts duelling with the i-th (1 ≤ i ≤ n) dragon and Kirito's strength is not greater than the dragon's strength x i, then Kirito loses the duel and dies. But if Kirito's strength is greater than the dragon's strength, then he defeats the dragon and gets a bonus strength increase by y i.

Kirito can fight the dragons in any order. Determine whether he can move on to the next level of the game, that is, defeat all dragons without a single loss.

Input
The first line contains two space-separated integers s and n (1 ≤ s ≤ 104, 1 ≤ n ≤ 103). Then n lines follow: the i-th line contains space-separated integers x i and y i (1 ≤ x i ≤ 104, 0 ≤ y i ≤ 104) — the i-th dragon's strength and the bonus for defeating it.

Output
On a single line print "YES" (without the quotes), if Kirito can move on to the next level and print "NO" (without the quotes), if he can't.

Examples
input
2 2
1 99
100 0
output
YES
input
10 1
100 100
output
NO
Note
In the first sample Kirito's strength initially equals 2. As the first dragon's strength is less than 2, Kirito can fight it and defeat it. After that he gets the bonus and his strength increases to 2 + 99 = 101. Now he can defeat the second dragon and move on to the next level.

In the second sample Kirito's strength is too small to defeat the only dragon and win.

题目大意:

玩游戏,英雄的力量超过龙的力量,那么英雄将获得龙的奖励力量加成,否则无法打败龙。第一行输入英雄的力量s和龙的数量n,接下来n行,输入每一条龙的力量值和奖励,均为整数。英雄可以任意选择挑战龙的顺序,问最终英雄能战胜所有龙吗?可以的话输出YES,否则输出NO。

题目分析:

模拟题,用结构体表示龙的两个属性,用sort按照力量从小到大排序。然后扫描一遍就可以了。

参考代码:

#include <bits/stdc++.h>
using namespace std;

struct dragon{
	int x, y;
}d[1010];

bool cmp(const dragon &X, const dragon &Y){
	if(X.x==Y.x)
		return X.y < Y.y;
	return X.x < Y.x; 
}

int main(){
	int s, n;
	cin >> s >> n;
	for(int i=1; i<=n; i++)
		cin >> d[i].x >> d[i].y;
	sort(d+1, d+n+1, cmp);
	int ans = 0;
	for(int i=1; i<=n; i++){
		if(s>d[i].x){
			s += d[i].y;
			ans ++;
		}else
			break;
	}
	if(ans==n)
		cout << "YES";
	else
		cout << "NO";
	return 0; 
} 
posted @ 2020-07-27 21:15  gdgzliu  阅读(118)  评论(0编辑  收藏  举报