专栏文章
CF2171B Yuu Koito and Minimum Absolute Sum
CF2171B题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @miqprow5
- 此快照首次捕获于
- 2025/12/04 08:44 3 个月前
- 此快照最后确认于
- 2025/12/04 08:44 3 个月前
题目大意
定义一个数组 。你需要用非负整数替换 数组中的所有 ,使得在 的绝对值最小的前提下让数组 的字典序最小。即在 最小的前提下让数组 的字典序最小。
思路
因为 ,所以我们可以看出 。也就是说答案只与 和 有关,而且为了保证字典序最小,将其余的未知数都赋值为 即可。这时候我们就可以分成四种情况来讨论。
- 当 和 都未知时,将 和 都赋值为 (因为要保证字典序最小,所以要赋值为 ),最小值为 。
- 当 未知, 已知时,将 赋值为 的值,最小值为 。
- 当 已知, 未知时,将 赋值为 的值,最小值为 。
- 当 和 都已知时,最小值为 。
随后输出数组 即可。
代码
CPP#include <bits/stdc++.h>
using namespace std;
const int N=2e5+4;
int a[N];
void solve()
{
int n;
cin >>n;
for(int i=1;i<=n;i++) cin >>a[i];
if(a[1]!=-1 && a[n]!=-1)
{
cout <<abs(a[n]-a[1])<<'\n';
for(int i=1;i<=n;i++)
{
if(a[i]==-1) cout <<0<<" ";
else cout <<a[i]<<" ";
}
}
else if(a[1]==-1 && a[n]!=-1)
{
cout <<0<<'\n';
for(int i=1;i<=n;i++)
{
if(i==1) cout <<a[n]<<" ";
else if(a[i]==-1) cout <<0<<' ';
else cout <<a[i]<<' ';
}
}
else if(a[1]!=-1 && a[n]==-1)
{
cout <<0<<'\n';
for(int i=1;i<=n;i++)
{
if(i==n) cout <<a[1]<<" ";
else if(a[i]==-1) cout <<0<<" ";
else cout <<a[i]<<" ";
}
}
else
{
cout <<0<<"\n";
for(int i=1;i<=n;i++)
{
if(a[i]==-1) cout <<0<<" ";
else cout <<a[i]<<" ";
}
}
cout <<'\n';
}
int main()
{
int t;
cin >>t;
while(t--) solve();
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...