睿智题目求调
  • 板块灌水区
  • 楼主_wangleting123_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/8 19:55
  • 上次更新2024/5/8 21:59:38
查看原帖
睿智题目求调
1040559
_wangleting123_楼主2024/5/8 19:55
问题描述:

新疆的某个矿场里新出了一批和田玉的籽料,大大小小共有n块,每一块和田玉都有各不相同的价值ai。 现需将这批和田玉籽料装入m只箱子中运到玉交易市场。

为了让这m只箱子的价值差之和最小,工人们对着n块玉按照价值大小依次排序,惊奇的发现这些玉每一块的价值与相邻的玉的差值竟然也各不相同。

箱子的价值差是指:箱子中一共有t块玉,每块玉的价值从大到小依次为A1,A2……,At,那么这只箱子的价值差值为:(A1-A2+A2-A3+……+At-1-At);如果箱子中只有1块玉,那么箱子的价值差就为0。

而m只箱子总体的价值差,就是各个箱子价值差的和。

现在要把这n块玉装入到m只箱子中了,尽量让编号小的玉放在编号小的箱子,请你替工人规划一下该如何装箱才能使得m只箱子的价值差最小。

输出时分别输出1号箱子到m号箱子内该装的玉,每只箱子中的玉按价值从小到大的顺序输出。
输入描述:

第1行两个整数n和m,分别表示玉的数量和箱子的数量;

第2行n个整数ai,分别表示每块玉的价值。
输出描述:

m行数,每行数字的开头是一个箱子的编号及冒号(英文输入下的冒号),后面若干个用1个空格隔开的整数,表示装入这个箱子的玉的价值
输入样例:

4 3
24 37 38 40

输出样例:

1:24
2:37 38
3:40

数据规模:

20%的数据:m=n<10;

60%的数据:m<=n<1000;

100%的数据:m<=n<20000,ai<=2∗109m<=n<20000,ai<=2∗109
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100000],k[100000],f[100000],hur;
struct node{
	int x,y,c;
}b[100000];
int cmp(node x,node y)
{
	return x.c>y.c;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i],k[i]=a[i];
	sort(a+1,a+n+1);
	for(int i=1;i<=n-1;i++)
	{
		b[i].c=a[i+1]-a[i];
		b[i].x=i;
		b[i].y=a[i+1];
	}
	sort(b+1,b+n+1,cmp);
	for(int i=1;i<=m;i++)
	{
		f[b[i].x]=1;
	}
	for(int i=1;i<=n;i++)
	{
		if(m&&f[i])
		{
			hur++;
			cout<<hur<<":";
			m--;
		}
		cout<<k[i]<<' ';
		
	}
	return 0;
}

2024/5/8 19:55
加载中...