站外题求助!
  • 板块学术版
  • 楼主iamajcer
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/3/14 13:19
  • 上次更新2024/3/14 17:38:12
查看原帖
站外题求助!
629377
iamajcer楼主2024/3/14 13:19

第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;
}
2024/3/14 13:19
加载中...