专栏文章
题解:CF2111C Equal Values
CF2111C题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mip2x8xs
- 此快照首次捕获于
- 2025/12/03 05:17 3 个月前
- 此快照最后确认于
- 2025/12/03 05:17 3 个月前
题意
给定一个包含 个整数的数组,每次操作:
- 选位置 ,将左侧所有元素设为 ,成本为 ;
- 选位置 ,将右侧所有元素设为 ,成本为 。
求使数组所有元素相等的最小总成本。
思路
- 目标值 应为数组中的最小值,减少总成本。
- 对于最小值 的最左边出现位置,用操作 覆盖左边元素;最右边出现位置,使用操作 覆盖右边元素。
- 出现多次,中间已覆盖,不需要操作。只用检查是未被覆盖的,并进行补充操作。
代码
CPP#include<bits/stdc++.h>
using namespace std;
void solve(){
int n;cin>>n;
vector<int>a(n);
for(int&x:a)cin>>x;
int mn=*min_element(a.begin(),a.end());
vector<int>pos;
for(int i=0;i<n;++i)if(a[i]==mn)pos.push_back(i);
long long res=(long long)pos[0]*mn+(long long)(n-1-pos.back())*mn;
for(int i=1;i<pos.size();++i)res+=(long long)(pos[i]-pos[i-1]-1)*mn;
cout<<res<<'\n';
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int t;cin>>t;
while(t--)solve();
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...