洛谷 AT_abc360_c [ABC360C] Move It 题解

题目大意

N N N 个箱子和 N N N 件物品,编号均为 1 ∼ N 1\sim N 1N

i i i 件物品放置在第 A i A_i Ai 个箱子中,重量为 W i W_i Wi

你可以将一件物品放置到另一个箱子里,而这件物品的重量就是这次操作的代价。

请问要让每个箱子都有意见物品至少要多少代价。

思路

众所周知,想要让代价最少,那么那些能不移动的就都不要移动,所以,如果某个箱子只有一个物品了,那么这个物品就不要移动了。

然后,对于有不止一个物品的箱子,想要达到题目的要求,就要让这个箱子只留下一个物品,剩下的全移走,同时,还要使代价最少。在这个箱子里,要移走的物品数量是不变的,所以要让代价最少,就只能让移走的物品尽可能轻,故要保留这个箱子中最重的一个。

为了方便,可以使用结构体,再进行一边排序,具体的排序方法如下:

  • 先按所在箱子编号从小到大排序,若一样,再按重量从小到大排序。

这样就可以使同一个箱子的物品在数组中的位置挨在一起,并且更快找出一个箱子中最重的那一个物品。

Code

#include<iostream>
#include<algorithm>
using namespace std;
struct stru{//结构体
	int w,a;
}arr[100000];
bool cmp(stru x,stru y) {//sort排序自定义规则
	if(x.a!=y.a) return x.a<y.a;
	return x.w<y.w;
}
signed main() {
	ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
	int n,ans=0;
	cin>>n;
	for(int i=0;i<n;++i) cin>>arr[i].a;
	for(int i=0;i<n;++i) cin>>arr[i].w;
	sort(arr,arr+n,cmp);//排序
	for(int i=0;i<n;++i) if(i<n-1/*防止数组出界*/&&arr[i].a==arr[i+1].a/*如果下一个也是这个箱子说明这个不是最重的物品*/) ans+=arr[i].w;//累加答案
	cout<<ans;
	return 0;
}
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
360C盘瘦身独立版是一种针对C盘进行瘦身优化的软件工具。C盘是计算机硬盘中的主要分区,存储了操作系统和常用软件等系统文件。随着使用时间的增长和软件安装的增多,C盘的可用空间逐渐减少,导致电脑性能下降和运行速度变慢。360C盘瘦身独立版则提供了一种解决办法。它可以对C盘进行瘦身,即清理C盘上的无用文件和缓存文件,从而释放出更多的空间。 360C盘瘦身独立版的使用非常简单。首先,用户需要下载和安装该软件。安装完成后,打开软件并选择“瘦身”功能。软件会自动进行扫描,分析C盘上的文件情况,并给出详细的报告。 在报告中,用户可以看到C盘中的各种文件类型和占用空间的情况,例如临时文件、垃圾文件、缓存文件等。用户可以根据自己的需求选择哪些文件可以删除或清理以释放空间。软件还提供了一键清理功能,可以自动清理C盘上的所有无用文件和缓存文件。 瘦身完成后,用户会发现C盘的可用空间得到了显著的增加。这将使电脑的性能得到提升,软件的运行速度加快。此外,释放出的空间还可以用于存储更多的文件和数据,提高工作效率。 总之,360C盘瘦身独立版是一种方便实用的软件工具,可以帮助用户优化C盘的使用,释放空间,提升电脑性能。大家可以根据自己的需要下载并使用此软件,来提高电脑的运行速度和工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值