首页 > 代码库 > Codeforces 230A
Codeforces 230A
1.题意描述:
Kirito 要打n个怪兽,每个怪兽有两种属性(xi,yi),xi代表怪兽的力量,yi代表击败怪兽后可以为Kirito自己增加的力量。初始时, Kirito有s力量,只有当Kirito的当前力量s比怪兽的力量xi的时候, Kirito才能击败这只怪兽i,同时,他自己的力量还将增加yi
你可以按任意顺序挑战这些怪兽,问Kirito最终能否击败所有的n只怪兽。
2.解题思路:
贪心算法+排序算法
巨人要打赢所有怪兽必须先打赢力量最小的怪兽,然后汲取力量y后在攻打力量第二大的怪兽,如此往复,直到巨人的力量小于或等于怪兽的力量时就输出no,否则输出yes。
3.代码细节:注意本题中结构体类型变量的排序,自己做题时临时写了一个排序算法(坑爹)。
1 #include<iostream> 2 #include <algorithm>//头文件不可丢 3 using namespace std; 4 struct dragon 5 { 6 int x,y; 7 }dra[5]; 8 int cmp(dragon a,dragon b){ 9 return a.x < b.x;//return a.x>b.x 10 }//注意cmp函数的书写,它代表按升序排列,稍加修改就可表示按降序排列 11 int main()12 {13 for(int i=0;i<5;i++)14 {15 scanf("%d%d",&dra[i].x,&dra[i].y);16 }17 sort(dra,dra+5,cmp);18 for(int s=0;s<5;s++)19 printf("%d %d\n",dra[s].x,dra[s].y);20 return 0;21 }
4.本题源码:
1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 const int maxn = 1010; 5 struct Dragon{ 6 int x,y; 7 bool operator < (const Dragon &rhs) const{ 8 return x < rhs.x; 9 }10 }dragon[1010];11 12 int main(){13 int s,n;14 scanf("%d%d",&s,&n);15 for(int i = 0;i < n;i++){16 scanf("%d%d",&dragon[i].x,&dragon[i].y);17 }18 sort(dragon,dragon+n);//默认排序为从小到大19 bool flag = 1;20 for(int i = 0;i < n;i++){21 if(s <= dragon[i].x){22 flag = 0;23 break;24 }else{25 s += dragon[i].y;26 }27 }28 if(flag) puts("YES");29 else puts("NO");30 return 0;31 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。