bzoj1045 糖果传递

真·水题。

环形均分纸牌模板题。

只需求出前缀和,然后取中位数求前缀和总和即可。

 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 typedef long long LL;
 5 const int N = 1000010;
 6 LL a[N], sum[N];
 7 int main() {
 8     int n;
 9     scanf("%d", &n);
10     for(int i = 1; i <= n; i++) {
11         scanf("%d", &a[i]);
12         sum[i] = sum[i - 1] + a[i];
13     }
14     LL k  = sum[n] / n;
15     for(int i = 1; i <= n; i++) {
16         a[i] -= k;
17         sum[i] = sum[i - 1] + a[i];
18     }
19     sort(sum + 1, sum + n + 1);
20     k = sum[(n + 1) >> 1];
21     LL ans = 0;
22     for(int i = 1; i <= n; i++) {
23         ans += abs(sum[i] - k);
24     }
25     printf("%lld\n", ans);
26     return 0;
27 }
AC代码

哈哈哈,5分钟A掉bz题

posted @ 2018-05-11 13:52  huyufeifei  阅读(121)  评论(0编辑  收藏  举报
试着放一个广告栏(虽然没有一分钱广告费)

『Flyable Heart 応援中!』 HHG 高苗京铃 闪十PSS 双六 電動伝奇堂 章鱼罐头制作组 はきか 祝姬 星降夜