牛客真题(33)-小熊吃糖
今天继续刷牛客真题,小熊吃糖。
分析:
刚开始以为每只小熊需要吃饱,可以吃剩,结果发现是每只小熊选择一个最大的可以尽量吃饱的糖,但是不能吃撑。也就是选择糖的时候的是糖的分量要小于或等于饥饿值。因此,需要对糖果的分量进行排序,并按照战斗力排序好的小熊进食。
初始:按照小熊的战斗力进行排序;按照糖的分量进行排序;
选择:根据小熊的饥饿度,选择饥饿度大于等于糖的分量的糖进食,如果饥饿值小于所有糖的分量,那么轮到下一个小熊进食;
终止:根据初始小熊的顺序进行输出饥饿值。
问题:
1、理解题目意思很重要;
2、Python中key的使用和lambda的使用;
附上C++代码:
#include
#include
#include
using namespace std;
struct Bear
{int fight;int hunger;int num;
};
bool fun1(Bear b1,Bear b2)
{if(b1.fight>b2.fight)return true;elsereturn false;
}
bool fun2(int a,int b)
{if(a>b)return true;elsereturn false;
}
bool fun3(Bear b1,Bear b2)
{if(b1.num>bearN>>candyN;vector candy(candyN);for(int i=0;i>candytemp;candy[i]=candytemp;}vector bears(bearN);for(int j=0;j>temp.fight>>temp.hunger;temp.num=j;bears[j]=temp;}sort(bears.begin(),bears.end(),fun1);sort(candy.begin(),candy.end(),fun2);for(int i=0;i=candy[index]){bears[i].hunger=bears[i].hunger-candy[index];candy[index]=0;}index++;}}sort(bears.begin(),bears.end(),fun3);for(auto c:bears){cout<
附上Python代码:
def eatsugar(n,m,sugar,bear):sugar=sorted(sugar,reverse=True)for item in sorted(bear.items(),key=lambda x:x[1],reverse=True):for i in range(m):if item[1][1]>=sugar[i]:item[1][1]=item[1][1]-sugar[i]sugar[i]=0for i in range(n):print(bear[i][1])if __name__=="__main__":n,m=map(int,input().split())sugar=list(map(int,input().split()))bear={}for i in range(n):f,h=map(int,input().split())bear[i]=[f,h]eatsugar(n,m,sugar,bear)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
