题解
2026-08-16 10:47:22
发布于:浙江
2阅读
0回复
0点赞
小模拟,双指针
#include<bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
int n;
int a[N];
long long num = 0;
int main()
{
cin>>n;
for(int i = 1;i<=n;i++)
{
cin>>a[i];
}
a[++n] = 0;
sort(a+1,a+n+1);
int kirin,l,r;
for(int i = 1;i<=n;i++)
{
if(a[i] == 0)
{
kirin = i;
break;
}
}
l = kirin-1;
r = kirin+1;
for(;l>0&&r<=n;)
{
if(abs(a[l]-a[kirin])<=abs(a[r]-a[kirin]))
{
num+=abs(a[l]-a[kirin]);
kirin = l;
l--;
}
else
{
num+=abs(a[r]-a[kirin]);
kirin = r;
r++;
}
}
if(l == 0&&r <= n)
{
for(int i = r;i<=n;i++)
{
num+=abs(a[i]-a[kirin]);
kirin = i;
}
}
else if(r == n+1&&l>=1)
{
for(int i = l;i>0;i--)
{
num+=abs(a[i]-a[kirin]);
kirin = i;
}
}
cout<<num;
return 0;
}
这里空空如也



有帮助,赞一个