3198 - B.小学生再摘苹果

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

    小学生是宿舍里出了名的吃货,怎么可能那几个苹果就满足他的胃口呢,这货要把整棵树上的苹果全部摘下来了啊!

    可是他没有石头了,旁边的易大师终于出手了,他挥一挥手瞬间就变出了n个箱子,每个箱子均为正方体,且大小不一定相同,易大师希望将这n个箱子叠在一起,不过为了易大师的生命安全,要求下面的箱子比上面的箱子大,当然树上的苹果还没全被摘完,而且每个苹果所处的高度也不完全相同,易大师能够摘到高度小于等于他所处的高度的所有的苹果,易大师的身高可以忽略不计!

题目输入

输入包含多组测试样例

第一行一个整n,表示有n个箱子 (0 <= n <= 100)

接下来的一行包含n个正整数,代表每个箱子的边长ai (0 < ai <= 100)

第三行一个正整数m,表示树上剩余的苹果总数 (0 <= m <= 100)

第四行包含m个正整数,表示每个苹果所处的高度hi (0 <= hi <= 100)

题目输出

对于每组输出仅包含一行表示易大师能摘取的最大个数

输入/输出样例

输入格式

3
10 20 30
1
10

输出格式

1

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;
}