3198 - B.小学生再摘苹果
小学生是宿舍里出了名的吃货,怎么可能那几个苹果就满足他的胃口呢,这货要把整棵树上的苹果全部摘下来了啊!
可是他没有石头了,旁边的易大师终于出手了,他挥一挥手瞬间就变出了n个箱子,每个箱子均为正方体,且大小不一定相同,易大师希望将这n个箱子叠在一起,不过为了易大师的生命安全,要求下面的箱子比上面的箱子大,当然树上的苹果还没全被摘完,而且每个苹果所处的高度也不完全相同,易大师能够摘到高度小于等于他所处的高度的所有的苹果,易大师的身高可以忽略不计!
Input
输入包含多组测试样例
第一行一个整n,表示有n个箱子 (0 <= n <= 100)
接下来的一行包含n个正整数,代表每个箱子的边长ai (0 < ai <= 100)
第三行一个正整数m,表示树上剩余的苹果总数 (0 <= m <= 100)
第四行包含m个正整数,表示每个苹果所处的高度hi (0 <= hi <= 100)
Output
对于每组输出仅包含一行表示易大师能摘取的最大个数
Examples
Input
3 10 20 30 1 10
Output
1
Solution C++
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main() { int n, m, k, a[101], b[101]; while(scanf("%d",&n) != EOF) { for(int i = 0 ; i < n ; i ++) { scanf("%d",&a[i]); } scanf("%d",&m); for(int i = 0 ; i < m ; i ++) { scanf("%d",&b[i]); } sort(a,a+n); int ans = 0, ans1 = 0; for(int i = n - 1 ; i >= 0 ; i --) { if(i != n - 1 && a[i] == a[i+1]) continue; ans += a[i]; } sort(b,b+m); for(int i = 0 ; i < m ; i ++) if(b[i] <= ans) ans1++; cout << ans1 << endl; } return 0; }