[题目解析]摘苹果
摘苹果(apple)
时间限制: 1000 ms 空间限制: 262144 KB
题目描述
秋天到了,小NN所在的学校组织小朋友们去秋游。这次他们去的地方是一个果园,果园里有很多很多的果树。由于小NN和他的小伙伴们总共N个人最喜欢吃苹果,所以他们都跑到了一棵苹果树下,这棵苹果树总共结出了M个苹果,管理果园的叔叔允许小朋友们自己摘苹果吃。
但是现在问题来了,每个苹果都有一个固定的高度。每个小朋友每次跳跃高度也都是一个固定值(跳一次花费的体力等于这个高度值),只要他们的跳跃高度大于等于某个苹果的高度的时候,就可以把那个苹果摘下来,跳一次最多只能摘一个苹果。由于小朋友们还小,体力上可能跟不上,所以规定每个小朋友最多只能跳一次。
现在小NN和他的小伙伴想要知道最少需要花费多少的体力才能将这些苹果全部摘完,现在请你来帮助他们吧!
输入
第一行两个正整数N和M,分别表示小朋友的数量和苹果的数量。
第二行N个正整数,两个整数间用一个空格分开,第i个数Hi表示第i个小朋友的跳跃高度。
第三行M个正整数,两个整数间用一个空格分开,第i个数Pi表示第i个苹果的高度。
输出
如果能够摘完所有的苹果,就输出最小的体力花费,如果不能摘完,就输出“Bad luck”(不包括引号)。
样例输入
样例输入1
3 2
5 3 6
4 6
样例输入2
3 3
4 2 3
3 3 4
样例输出
样例输出1
11
样例输出2
Bad luck
数据范围限制
100%的数据,1<=N,M<=1000,1<=Hi,Pi<=1000。
提示
【样例1解释】
首先让跳跃高度为5的小朋友去摘高度为4的苹果,花费的体力值是5,然后让跳跃高度为6的小朋友去摘高度为6个苹果,花费的体力值是6,所以总共花费体力值11。
【样例2解释】
由于是3个小朋友摘3个苹果,第2个小朋友的跳跃高度不足以摘到任何一个苹果,所以不能摘下所有的苹果。
思路:
首先我们需要将H和P数组从小到大排序,然后双层循环来看当前的苹果有哪个小朋友能摘得了,注意一个小朋友只能摘一次,我们每次判断,如果这个苹果谁都摘不了,那就证明不能够全部摘完,所以按照题意输出Bad luck。如果全部都能摘,那最后输出ANS即可。
接下来上代码:
#include<bits/stdc++.h>
using namespace std;
int h[1001],p[1001],s=0;
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++){//输入H数组
cin>>h[i];
}
sort(h+1,h+n+1);//排序H数组
for(int i=1;i<=m;i++){//输入P数组
cin>>p[i];
}
sort(p+1,p+m+1);//排序P数组
int j=1,flag=1;
for(int i=1;i<=m;i++){//双层循环
flag=1;
for(;j<=n;j++){
if(h[j]>=p[i]){
s+=h[j];
flag=0;
j++;
break;
}
}
if(flag){
cout<<"Bad luck";
return 0;
}
}
cout<<s;
}
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!