题解 AT3533 【[ABC074B] Collecting Balls (Easy Version)】

TRZ_2007

2021-02-21 16:21:00

Solution

**[题解 AT3533 【[ABC074B] Collecting Balls (Easy Version)】](https://www.luogu.com.cn/problem/AT3533)** ~~这个题面描述居然如此的不友好,那么就重新翻译一下~~ # Description 在平面直角坐标系中有 $n$ 个点,第 $i$ 个点的坐标为 $(i,a_i)$,有点 $(i,k)$ 和 $(i,0)$ 与其对应,求所有的 $i$ 号点与距离其最近的点的距离和的两倍。 # Solution 其实这道题非常的简单,可以评红。 对于点 $(i,a_i)$ 来说,和它距离最近的点只能是$(i,k)$ 或 $(i,0)$,对这两个值取最大值就好了,时间复杂度 $\mathcal{O(n)}$。 # Code ```cpp #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; } ```