题解:AT_abc360_c [ABC360C] Move It
背景
机房大佬掉大分了,乐悲。
题意
给你几个箱子和每个箱子里装有的东西
分析
贪心。首先最终状态里所有箱子一定只有一个东西,那么对于所有装东西的箱子,若装有
由于东西数量和箱子数量相等,那么我们无需考虑每个箱子中的东西该放到那些箱子里,因为空箱子的数量一定是符合的。
那么就把每个箱子中的东西统计出来,从小到大排序,每个箱子的代价就是前
Code
#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/hash_policy.hpp>
#include<ext/pb_ds/trie_policy.hpp>
#include<ext/pb_ds/priority_queue.hpp>
#define int long long
using namespace std;
using namespace __gnu_pbds;
//gp_hash_table<string,int>mp2;
//__gnu_pbds::priority_queue<int,greater<int>,pairing_heap_tag> q;
inline int read()
{
int w=1,s=0;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch)){s=s*10+(ch-'0');ch=getchar();}
return w*s;
}
const int mod=998244353;
const int maxn=1e6+10;
int n;
int a[maxn],w[maxn];
vector<int> v[maxn];
int ans=0;
bool f[maxn];
signed main()
{
// freopen("xxx.in","r",stdin);
// freopen("xxx.out","w",stdout);
cin>>n;
for(int i=1;i<=n;i++)
{
a[i]=read();
f[a[i]]=1;
}
for(int i=1;i<=n;i++)w[i]=read();
for(int i=1;i<=n;i++)
{
v[a[i]].push_back(w[i]);
}
for(int i=1;i<=n;i++)
{
if(f[i])
{
sort(v[i].begin(),v[i].end());
for(int j=0;j<v[i].size()-1;j++)
{
ans+=v[i][j];
}
}
}
cout<<ans;
return 0;
}
分类:
题解合集
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】