第1题 水果盘 查看测评数据信息 小明家举行聚会,邀请了很多同学参加,所以小明准备了很多水果盘,装水果共同学们吃,由于来的同学比较多,所以小明不得不把果盘合并到一起,这样就可以腾出来很多水果盘。假如小明准备了n个水果盘,第i个水果盘上面放了a(i)个水果,并且每个水果盘都有一个容量b(i),任何时刻a(i)必须小于等于b(i),小明可以从一个水果盘拿一个水果放到另一个水果盘上面,操作花费1秒钟(可以进行任意次操作),请你帮小明算一下最少需要多少个水果盘才能装的下所有的水果,以及该情况下所用的最少时间。
输入格式 第一行输入一个正整数n(1<n≤100)。
第二行输入n个正整数,第i个正整数表示a(i)(1≤a(i)≤100)。
第三行输入n个正整数,第i个正整数表示b(i)(1≤b(i)≤100)。
对于每一个i,满足a(i)≤b(i)。
输出格式 两个正整数,表示最小的水果盘数和最小的操作时间
输入/输出例子1 输入:
4
3 3 4 3
4 7 6 5
输出:
2 6
样例解释 无
这个代码是乱写的,没想到竟然A了2个点,求大佬教教正解
#include <bits/stdc++.h>
using namespace std;
const int N=105;
struct node
{
int a, b;
}a[N];
int n, sum=0, sum2=0, sum3=0;
bool cmp(node a, node b)
{
return a.b>b.b;
}
int main()
{
scanf("%d", &n);
for (int i=1; i<=n; i++)
{
scanf("%d", &a[i].a);
sum+=a[i].a;
}
for (int i=1; i<=n; i++) scanf("%d", &a[i].b);
sort(a+1, a+1+n, cmp);
for (int i=1; i<=n; i++)
{
sum2+=a[i].b-a[i].a;
sum3+=a[i].a;
if (sum2>=sum-sum3)
{
printf("%d %d", i, sum-sum3);
break;
}
// cout<<sum2<<endl;
}
return 0;
}