BZOJ2620 [Usaco2012 Mar]Haybale Restacking

恩,非常好的题。。。至少思路非常巧妙

首先可以得到性质:对于相邻的两堆A & B,A给B然后B再给A是完全没有意义的。。。也就是说只能单向传递

然后我们记下每个点要给(被给)多少堆干草a[i]

同时可以计算出del[i],表示若第i堆只向右传且第n堆不向第1堆运任何干草的情况下i - 1向i传递干草的数量

del[i] = del[i - 1] + a[i - 1](其实就是前缀和)

现在1可以向右移了,设向右移x堆,则ans = Σabs(del[i] - x)

故x = mid(del + 1, del + n + 1)时,ans最小

更加详细见lrj白书P4。。。

 1 /**************************************************************
 2     Problem: 2620
 3     User: rausen
 4     Language: C++
 5     Result: Accepted
 6     Time:68 ms
 7     Memory:1588 kb
 8 ****************************************************************/
 9
10 #include <cstdio>
11 #include <algorithm>
12
13 using namespace std;
14 typedef long long ll;
15 const int N = 100005;
16 int n;
17 int a[N], del[N];
18 ll ans;
19
20 inline int read(){
21     int x = 0, sgn = 1;
22     char ch = getchar();
23     while (ch < ‘0‘ || ch > ‘9‘){
24         if (ch == ‘-‘) sgn = -1;
25         ch = getchar();
26     }
27     while (ch >= ‘0‘ && ch <= ‘9‘){
28         x = x * 10 + ch - ‘0‘;
29         ch = getchar();
30     }
31     return sgn * x;
32 }
33
34
35 int main(){
36     n = read();
37     int i, m = (n + 1) >> 1;
38     for (i = 1; i <= n; ++i)
39         a[i] = read(), a[i] -= read();
40     for (i = 2; i <= n; ++i)
41         del[i] = a[i - 1] + del[i - 1];
42     del[1] = a[n] + del[n];
43     sort(del + 1, del + n + 1);
44     for (i = 1; i <= n; ++i)
45         ans += abs(del[m] - del[i]);
46     printf("%lld\n", ans);
47     return 0;
48 }

时间: 2024-08-02 11:26:26

BZOJ2620 [Usaco2012 Mar]Haybale Restacking的相关文章

2620: [Usaco2012 Mar]Haybale Restacking

2620: [Usaco2012 Mar]Haybale Restacking Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 201  Solved: 111[Submit][Status][Discuss] Description Farmer John has just ordered a large number of bales of hay. He would like to organize these into N piles (1

BZOJ2621 [Usaco2012 Mar]Cows in a Skyscraper

首先比较容易想到是状态压缩DP 令$f[S]$表示选取了集合$S$以后,已经送了最少次数cnt且当前电梯剩下的体积rest最大(即$f[S]$是一个二元组(cnt, rest)) 于是$f[S] = min_{i \in S} f[S - {i}] + v[i]$ $<$和$+$运算详情就请看程序好了,反正就是一个贪心思想,总复杂度$O(n * 2 ^ {n - 1})$ 1 /***********************************************************

洛谷3258:[USACO2012 MAR]Flowerpot 花盆——题解

https://www.luogu.org/problemnew/show/P2698#sub 老板需要你帮忙浇花.给出N滴水的坐标,y表示水滴的高度,x表示它下落到x轴的位置. 每滴水以每秒1个单位长度的速度下落.你需要把花盆放在x轴上的某个位置,使得从被花盆接着的第1滴水开始,到被花盆接着的最后1滴水结束,之间的时间差至少为D. 我们认为,只要水滴落到x轴上,与花盆的边沿对齐,就认为被接住.给出N滴水的坐标和D的大小,请算出最小的花盆的宽度W. 单调队列好题,参考洛谷题解. emm……显然是

1639: [Usaco2007 Mar]Monthly Expense 月度开支

1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 593  Solved: 295[Submit][Status] Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi(1<=money

[BZOJ] 1639: [Usaco2007 Mar]Monthly Expense 月度开支

1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1077  Solved: 533[Submit][Status][Discuss] Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi(1

[BZOJ1639][Usaco2007 Mar]Monthly Expense 月度开支

1639: [Usaco2007 Mar]Monthly Expense 月度开支 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1069  Solved: 530 [Submit][Status][Discuss] Description Farmer John是一个令人惊讶的会计学天才,他已经明白了他可能会花光他的钱,这些钱本来是要维持农场每个月的正常运转的.他已经计算了他以后N(1<=N<=100,000)个工作日中每一天的花费moneyi

[BZOJ1617][Usaco2008 Mar]River Crossing渡河问题

1617: [Usaco2008 Mar]River Crossing渡河问题 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1102  Solved: 801 [Submit][Status][Discuss] Description Farmer John以及他的N(1 <= N <= 2,500)头奶牛打算过一条河,但他们所有的渡河工具,仅仅是一个木筏. 由于奶牛不会划船,在整个渡河过程中,FJ必须始终在木筏上.在这个基础上,木筏上的奶牛数

bzoj 1637: [Usaco2007 Mar]Balanced Lineup

1637: [Usaco2007 Mar]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MB Description Farmer John 决定给他的奶牛们照一张合影,他让 N (1 ≤ N ≤ 50,000) 头奶牛站成一条直线,每头牛都有它的坐标(范围: 0..1,000,000,000)和种族(0或1). 一直以来 Farmer John 总是喜欢做一些非凡的事,当然这次照相也不例外.他只给一部分牛照相,并且这一组牛的阵容必须是"

Bzoj 1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 传递闭包,bitset

1703: [Usaco2007 Mar]Ranking the Cows 奶牛排名 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 323  Solved: 238[Submit][Status][Discuss] Description 农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序.    约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他发现,他还需要再做一