木桶效应(c++题解)

题目描述

题目描述

你有块木板,这些木板都是等宽的,第个木板的长度为。你必须要制作个桶,每个桶由块木板组成,你可以用任意个木板来建造一个桶。最后要求没有剩余的木板。

每个桶的体积看作是组成该桶的最短木板长度。

你要使用所有木板来制作个桶,并且要使得所有桶的总体积最大,还要求任意两个桶的体积不超过,即对于任何和,。

输出个桶的总体积最大值。如果无法满足上述条件,则输出。

输入格式

第一行包含三个空格分隔的整数、和。

第二行包含空间分隔的整数,,,,分别表示木板的长度。

输出格式

输出一个整数,表示个桶的总体积最大值。如果无满足条件,输出。

样例

样例输入 1

复制代码
复制4 2 1
2 2 1 2 3 2 2 3

样例输出 1

复制代码
复制7

样例解释 1

在第一个样例中,可以形成以下桶:,,,,,,,。

样例输入 2

复制代码
复制2 1 0
10 10

样例输出 2

复制代码
复制20

样例解释 2

在第二个样例中,可以形成以下桶:,。

样例输入 3

复制代码
复制1 2 1
5 2

样例输出 3

复制代码
复制2

样例解释 3

在第三个样例中,可以形成以下桶:,。

样例输入 4

复制代码
复制3 2 1
1 2 3 4 5 6

样例输出 4

复制代码
复制0

样例解释 4

在第四个样例中,任意两桶的体积之差至少为,不满足为的限制。


日常发作业题解。

也是简单到爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆爆表的题

写作不易,点个赞呗!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
long long a[1000005];
long long n,m,x,ans;
int main(){
	cin>>n>>m>>x;
	for(int i=1;i<=n*m;i++)cin>>a[i];
	sort(a+1,a+1+n*m);
	int l=n*m;
	while(l>0){
		if(a[l]-a[1]>x)l--;
		else break;
	}
	int L=n*m-l;
	while(L>0&&l>0){
		if(L+1<m)break;
		ans+=a[l],l--,L-=m-1;
	} 
	if(l==0&&L>0){
		cout<<"0";
		return 0;
	}
	if(L>0){
		l-=m-1-L;
		ans+=a[l];
		l--;
	}		
	for(int i=1;i<=l;i+=m)ans+=a[i];
	cout<<ans;
}
相关推荐
橘颂TA8 分钟前
【剑斩OFFER】算法的暴力美学——翻转对
算法·排序算法·结构与算法
叠叠乐9 分钟前
robot_state_publisher 参数
java·前端·算法
hweiyu0019 分钟前
排序算法:冒泡排序
算法·排序算法
brave and determined32 分钟前
CANN训练营 学习(day9)昇腾AscendC算子开发实战:从零到性能冠军
人工智能·算法·机器学习·ai·开发环境·算子开发·昇腾ai
Dave.B1 小时前
用【vtk3DLinearGridCrinkleExtractor】快速提取3D网格相交面
算法·3d·vtk
yaoh.wang1 小时前
力扣(LeetCode) 1: 两数之和 - 解法思路
python·程序人生·算法·leetcode·面试·跳槽·哈希算法
Code Slacker1 小时前
LeetCode Hot100 —— 滑动窗口(面试纯背版)(四)
数据结构·c++·算法·leetcode
brave and determined1 小时前
CANN训练营 学习(day8)昇腾大模型推理调优实战指南
人工智能·算法·机器学习·ai实战·昇腾ai·ai推理·实战记录
总爱写点小BUG2 小时前
打印不同的三角形(C语言)
java·c语言·算法
yaoh.wang2 小时前
力扣(LeetCode) 27: 移除元素 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针