C. The Party and Sweets

本文探讨了在特定条件下,如何计算男生向女生分配糖果的最小总数。通过分析男生给出的糖果数量和女生收到的糖果数量,提出了一种有效的算法解决方案,确保了糖果分配的公平性和最小化。

题目链接

题意:n个男生m个女生,每个男生分别给每个女生任意颗糖,bi表示第i个男生给这m个女生中糖果最少的数量,gi表示第i个女生收到糖果中最多的数量,求男生一共拿出的糖果的最小值。

解题思路:既然要求最小的总数,那么gi应该尽可能全由bi中最大的那个男生拿出来(这样差值最小),先得判断是否有解(如果一次收到最多糖果中的最小值 还比 bi的最大值 小那么就无解,因为每个女生至少收到max(bi)给的糖果数),然后如果gi中最小的数比max(bi)大的话就由第二大(bi)送

#include<iostream>
#include<algorithm>
#define maxn 101010
using namespace std;
typedef long long ll;
int main()
{
	ll n,m,b[maxn],g[maxn],ans=0;
	cin>>n>>m;
	for(int i=0;i<n;i++) cin>>b[i];
	for(int i=0;i<m;i++) cin>>g[i];
	sort(b,b+n);
	sort(g,g+m);
	if(g[0]<b[n-1])
	{
		cout<<-1;
		return 0;
	}
	for(int i=0;i<n;i++) ans+=b[i];
	ans*=m;//每个人送一遍最小的
	for(int i=1;i<m;i++) ans+=g[i]-b[n-1];//n-1个由max(bi)送与最小值的差值
	if(g[0]!=b[n-1]) ans+=g[0]-b[n-2];//如果比max(bi)大
	cout<<ans;//如果等于max(bi)的话就包含在送一遍中
	return 0;
}
这是代码型问题。 ### 代码概述 该代码定义了一个函数 `cake`,该函数打印 `'beets'` 并返回一个内部函数 `pie`。`pie` 函数在调用时打印 `'sweets'` 并返回字符串 `'cake'`。接下来,代码演示了如何调用这些函数并处理返回值。 ### 代码解析 ```python >>> def cake(): ... print('beets') ... def pie(): ... print('sweets') ... return 'cake' ... return pie ... >>> chocolate = cake() beets >>> more_chocolate, more_cake = chocolate(), cake sweets >>> more_chocolate 'cake' ``` #### 详细解释 1. **定义 `cake` 函数**: - `cake` 函数打印 `'beets'`。 - 它定义了一个内部函数 `pie`,该函数打印 `'sweets'` 并返回字符串 `'cake'`。 - `cake` 函数返回内部函数 `pie`。 2. **调用 `cake` 并赋值给 `chocolate`**: - `chocolate = cake()` 调用 `cake` 函数,打印 `'beets'`,并将返回的 `pie` 函数赋值给 `chocolate`。 3. **调用 `chocolate()` 和赋值给 `more_chocolate, more_cake`**: - `chocolate()` 实际上调用了 `pie` 函数,打印 `'sweets'` 并返回 `'cake'`。 - 因此,`more_chocolate` 被赋值为 `'cake'`,而 `more_cake` 被赋值为 `cake` 函数本身(注意:`cake` 是函数对象,不会再次打印 `'beets'`)。 4. **检查 `more_chocolate` 的值**: - `more_chocolate` 的值是 `'cake'`,这是 `pie` 函数的返回值。 - `more_chocolate` 并不是对 `pie` 函数的调用,所以不会再进行打印。 #### 为什么 `more_chocolate` 返回 `'cake'` 而不会进行打印? - `more_chocolate` 是 `pie` 函数调用的返回值,即 `'cake'`,而不是对 `pie` 函数的调用。 - 因此,`more_chocolate` 的值是字符串 `'cake'`,它只是保存了上次调用 `pie` 的返回结果,并不会再次触发任何打印操作。 ### 知识点 1. **函数返回**:函数可以返回另一个函数。 2. **内部函数**:内部函数可以访问外部函数的变量。 3. **函数调用与返回值**:调用函数返回的值可以赋值给变量,不会再次执行打印等副作用。 因此,`more_chocolate` 的值是 `'cake'`,而不会再次进行打印,因为它只是保存了上次调用 `pie` 函数的返回结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值