0
点赞
收藏
分享

微信扫一扫

打怪C++代码

Silence潇湘夜雨 2022-01-23 阅读 72
c++
#include<bits/stdc++.h>
using namespace std;
struct node{
	int x;
	int y;
}a[100005],b[100005];
bool cmp1(node a,node b){
	return a.x<b.x;
}
bool cmp2(node a,node b){ 
	return a.y>b.y;
}
long long n,z,aa=0,bb=0;
int main(){
	cin>>n>>z;
	for(int i=1;i<=n;i++){
		int x,y;
		cin>>x>>y;
		if(x<y){
			aa++;
			a[aa].x=x;
			a[aa].y=y;
		}
		else{
			bb++;
			b[bb].x=x;
			b[bb].y=y;
		}
	}
	sort(a+1,a+1+aa,cmp1);
	sort(b+1,b+1+bb,cmp2);
	for(int i=1;i<=aa;i++){
		z-=a[i].x;
		if(z>0)
			z+=a[i].y;
		else{
			cout<<"NIE";
			return 0;
		}
	}
	for(int i=1;i<=bb;i++){
		z-=b[i].x;
		if(z>0)
			z+=b[i].y;
		else{
			cout<<"NIE";
			return 0;
		}
	}
	cout<<"TAK";
	return 0;
}
I打怪
时间限制 : - MS   空间限制 : - KB 

评测说明 : 1s,128m

问题描述

在一款电脑游戏中,你需要打败n只怪物(从1到n编号)。
为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值。任何时候你的生命值都不能降到0(或0以下)。
请问是否存在一种打怪顺序,使得你可以打完这n只怪物而不死掉

输入格式

第一行两个整数n,z(1<=n,z<=100000),分别表示怪物的数量和你的初始生命值。
接下来n行,每行两个整数d[i],a[i]
d[i],a[i] <=50000

输出格式

一行为TAK(是)或NIE(否),表示是否存在这样的顺序。

样例输入

3 5
3 1
4 8
8 3

样例输出

TAK 

 

举报

相关推荐

0 条评论