A. Dragons

水题地址

基里托现在还停留在MMORPG的水平上。为了在游戏中继续前进,他必须打败所有生活在这个级别的n条龙。基里托和龙有力量,力量用一个整数表示。在两个对手之间的决斗中,决斗的结果是由他们的力量决定的。一开始,基里托的力等于s。
如果Kirito开始决斗的i(1≤≤n)龙和Kirito的实力并不比龙的力量,然后Kirito失去决斗而死。但是如果基里托的力量大于龙的力量,那么他就打败了龙,并得到易的力量加成。
克里托可以以任何顺序与龙战斗。决定他是否能够进入游戏的下一个阶段,即,在没有任何损失的情况下击败所有的龙。
输入
第一行包含两个空格分隔的整数n(1≤≤104,1≤n≤103)。n行:第i和yj行包含空格分隔的整数(1习≤≤104,0≤易建联≤104)- i龙的力量和奖金击败它。
输出
在一行中打印“YES”(不带引号),如果Kirito可以进入下一个级别并打印“NO”(不带引号),如果他不能的话。

请注意
在第一个样本中,基里托的强度最初等于2。由于第一条龙的力量小于2,Kirito可以打败它。之后他得到奖励,他的力量增加到2 + 99 = 101。现在他可以打败第二条龙并进入下一关。
在第二个样本中,基里托的力量太小,无法打败唯一的龙并获胜。

就是可以任意选择关卡,打怪升级。

先来看个错误代码

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
	long int s, n, i, k, j = 0;
	long int x[10001], y[10001];
	cin >> s >> n;
	for (i = 0; i < n; i++)
		cin >> x[i] >> y[i];
	sort(x, x + n);
	for (i = 0; i < n; i++)
		if (s > x[i])
		{
			s += y[i]; j++;
		}
	if (j == n)
		cout << "YES" << endl;
	else
		cout << "NO" << endl;
	//system("pause");
	return 0;
}

原因是x[i]改变了,y[i]没有跟着改变,emmmm,所以错误了。。。。

正确代码

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
	long int s, n, i, j;
	long int x[10001], y[10001];
	int temp1, temp2, sum = 0;
	cin >> s >> n;
	for (i = 0; i < n; i++)
		cin >> x[i] >> y[i];
	for (i = 0; i < n; i++)
		for (j = i + 1; j < n; j++)
			if (x[j] < x[i])
			{
				temp1 = x[j];
				x[j] = x[i];
				x[i] = temp1;


				temp2 = y[j];
				y[j] = y[i];
				y[i] = temp2;
			}
	for (i = 0; i < n; i++)
		if (s > x[i]) { s += y[i]; sum++; }
	if (sum == n)
		cout << "YES" << endl;
	else
		cout << "NO" << endl;
	//system("pause");
	return 0;
}

还是要用两个for暴力破解诶。。。。

猜你喜欢

转载自blog.csdn.net/weixin_43866567/article/details/87914538