题解 AT3533 【[ABC074B] Collecting Balls (Easy Version)】
这个题面描述居然如此的不友好,那么就重新翻译一下
Description
在平面直角坐标系中有 $n$ 个点,第 $i$ 个点的坐标为 $(i,a_i)$,有点 $(i,k)$ 和 $(i,0)$ 与其对应,求所有的 $i$ 号点与距离其最近的点的距离和的两倍。
Solution
其实这道题非常的简单,可以评红。
对于点 $(i,a_i)$ 来说,和它距离最近的点只能是$(i,k)$ 或 $(i,0)$,对这两个值取最大值就好了,时间复杂度 $\mathcal{O(n)}$。
Code
#include <bits/stdc++.h>
using namespace std;
const int N = 109;
#define gc getchar
inline int read() {
int c = gc(), t = 1, n = 0;
while(isspace(c)) { c = gc(); }
if(c == '-') { t = -1, c = gc(); }
while(isdigit(c)) { n = n * 10 + c - '0', c = gc(); }
return n * t;
}
#undef gc
int a[N],n,k,sum;
int main() {
n = read(); k = read();
for(int i = 1;i <= n;i++) a[i] = read();
for(int i = 1;i <= n;i++) sum += min(a[i],k - a[i]);
// (i,ai)到(i,0)的距离为a,到(i,k)的距离为k-ai
printf("%d\n",sum * 2);
return 0;
}