基里托现在还停留在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暴力破解诶。。。。