BZOJ 3293 分金币 && BZOJ 1045 糖果传递

   我一定要吐槽,看到糖果传递那道题神奇的数据范围,我内心都奔溃了,后来因为这个可耻地去看了一下别人的题解,最后,别人开了100万A掉了,说好的n <= 987654321呢!看来数据范围不能全信啊! 这道题不难,马上就想起了那个没有环的贪心,再沿着那个的思路去思考,马上就找到了前缀和,差不多了,减法那一步也已经想到了,只是把减数搞错了,WA了,后来仔细一想,其实不管是减数还是被减数都是前缀和,这道题就这样了。其实可以不用列方程去建模,如果那个没有环的贪心很熟悉的话!加油,知识的积累。

然而令我无语的是,标题的那两道题几乎一模一样,连样例都一样!我就呵呵啊

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #define rep(i,j,k) for(int i = j; i <= k; i++)
 5 #define ll long long
 6 using namespace std;
 7 
 8 int a[1000001], pre[1000001];
 9 
10 int abs(int a)
11 {
12     if( a < 0 )return -a;
13     else return a;
14 } 
15 int read()
16 {
17     int s = 0, t = 1; char c = getchar();
18     while( !isdigit(c) ){
19         if( c == '-' ) t = -1; c = getchar();
20     }
21     while( isdigit(c) ){
22         s = s * 10 + c - '0'; c = getchar();
23     }
24     return s * t;
25 }
26 
27 int main()
28 {
29     int n = read(); ll sum = 0;
30     rep(i,1,n){
31         a[i] = read(); sum += a[i];
32     }
33     sum /= n;
34     rep(i,1,n){
35         a[i] -= sum, pre[i] = pre[i-1] + a[i];
36     }
37     sort(pre+1,pre+n+1); ll mid = pre[(1+n)>>1];
38     ll ans = 0;
39     rep(i,1,n){
40         ans += abs(pre[i]-mid);
41     }
42     cout<<ans<<endl;
43     return 0;
44 }

 

posted on 2016-01-02 10:23  83131  阅读(173)  评论(0编辑  收藏  举报

导航