Codeforces 383A - Milking cows
原题地址:http://codeforces.com/problemset/problem/383/A
题目大意:有 n 头奶牛,全部看着左边或者右边,现在开始给奶牛挤奶,给一头奶牛挤奶时,所有能看到它的奶牛会损失一升奶,已经挤过的奶牛不会再损失,求一种挤奶顺序,使得失去的牛奶数最少。(1 <= n <= 200000)
题目分析:考场上看到它的时候想:这不就是一个裸的线段树么……但是由于线段树不熟就没写出来……考完参照网上一些解法发现自己真的是想多了……唉……原来是贪心
我们需要证明以下一个性质:
最优值一定会出现在先挤完所有向左看的奶牛或者所有向右看的奶牛这两种情况之中(当然不止会出现在这两种情况之中),并且,我们一定先从最右边的向左看的奶牛或者最左边的向右看的奶牛挤起。
首先第二条性质不难理解,如果我们先从中间的一个挤起,必然不会比挤最边上的那头更优,可以用反证法来证明一下。
设suml[i]为从1 ~ i向左看的奶牛的个数,sumr[i]为从1 ~ i向右看的奶牛的个数,假设第k、j头奶牛是向左看的(且j在k的右边),若先挤第k头奶牛更优,则必须满足
suml[n] - suml[k] + sumr[k - 1] + suml[n] - suml[j] + sumr[j - 1] <= suml[n] - suml[j] + sumr[j - 1] + (suml[n] - 1 - suml[k]) + sumr[k - 1] (减一是因为 j 已经被挤过了,不可能再失去牛奶)这显然不会成立
第一条性质也因此变得显然了,加入我们先挤看着右边的,假设共有w头奶牛能看到最右边的看着左边的奶牛(权且成为P),那么同理,P能看到的看着右边的奶牛有且仅有w头,那么在挤这w头奶牛的过程中,P会失去w单位的奶,而如果我们先挤P,那w头奶牛也会失去w单位的奶,所以它们是等价的。
那么只需要扫一遍就好啦~
//date 20140121
#include <cstdio>
#include <cstring>
#include <iostream> using namespace std; const int maxn = ; inline int getint()
{
int ans(); char w = getchar();
while('' > w || w > '')w = getchar();
while('' <= w && w <= '')
{
ans = ans * + w - '';
w = getchar();
}
return ans;
} int n;
int stu[maxn], l[maxn], r[maxn]; int main()
{
// freopen("c.in", "r", stdin); n = getint();
for(int i = ; i <= n; ++i)stu[i] = getint();
for(int i = ; i <= n; ++i)l[i] = l[i - ] + stu[i - ];
for(int i = n - ; i >= ; --i)r[i] = r[i + ] + (!stu[i + ]);
long long a1 = , a2 = ; for(int i = n; i >= ; --i)a1 += (long long)(stu[i] == ? l[i] : );
for(int i = ; i <= n; ++i)a2 += (long long)(stu[i] == ? r[i] : ); cout << (a1 < a2 ? a1 : a2) << endl;
return ;
}
Codeforces 383A - Milking cows的更多相关文章
- CodeForces 384C Milking cows
水题. 对于两个$0$,肯定是先删去后面的$0$,再删去前面的$0$. 对于两个$1$,肯定是先删去前面的$1$,再删去后面的$1$. 对于一个$0$和一个$1$,无论先删哪一个,对答案做出的贡献都是 ...
- Milking Cows
Milking Cows Three farmers rise at 5 am each morning and head for the barn to milk three cows. The f ...
- 洛谷P1204 [USACO1.2]挤牛奶Milking Cows
P1204 [USACO1.2]挤牛奶Milking Cows 474通过 1.4K提交 题目提供者该用户不存在 标签USACO 难度普及- 提交 讨论 题解 最新讨论 请各位帮忙看下程序 错误 ...
- codeforce ---A. Milking cows
A. Milking cows time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...
- 【题解】Luogu P1204 [USACO1.2]挤牛奶Milking Cows
原题传送门:P1204 [USACO1.2]挤牛奶Milking Cows 实际是道很弱智的题目qaq 但窝还是觉得用珂朵莉树写会++rp(窝都初二了,还要考pj) 前置芝士:珂朵莉树 窝博客里对珂朵 ...
- Milking Cows 挤牛奶
1.2.1 Milking Cows 挤牛奶 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 554 Solved: 108[Submit][Status ...
- 【洛谷P1204】【USACO1.2】挤牛奶Milking Cows
P1204 [USACO1.2]挤牛奶Milking Cows 题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个 ...
- Milking Cows 挤牛奶 USACO 排序 模拟
1005: 1.2.1 Milking Cows 挤牛奶 时间限制: 1 Sec 内存限制: 128 MB提交: 15 解决: 9[提交] [状态] [讨论版] [命题人:外部导入] 题目描述 1 ...
- 【USACO】Milking Cows
Three farmers rise at 5 am each morning and head for the barn to milk three cows. The first farmer b ...
随机推荐
- android退出登陆后,清空之前所有的activity,进入登陆主界面
如题: android退出登陆后,清空之前所有的activity,进入登陆主界面 在退出登陆时只需要增加一个intent标志 Intent intent_login = new Intent(); i ...
- p1205单词翻转-递归解决
题目描述 Description 给出一个英语句子,希望你把句子里的单词顺序都翻转过来 输入描述 Input Description 输入包括一个英语句子. 输出描述 Output Descripti ...
- CodeForces 173B Chamber of Secrets 二分图+最短路
题目链接: http://codeforces.com/problemset/problem/173/B 题意: 给你一个n*m的地图,现在有一束激光从左上角往左边射出,每遇到‘#’,你可以选择光线往 ...
- java 使用 comet4j 主动向客户端推送信息 简单例子
[背景] 今天,一个前端的师弟问我怎样做实时聊天窗口,我毫不犹豫地说:在前台定时访问服务端呀!师弟默默地百度了一番,最后告诉我,有一种技术是后服务端动推送信息给客户端的,这种技术的名字叫comet,我 ...
- Webbrowser 取消下载提示框
在使用Webbrowser抓取网页信息时,碰到需要下载文件,这时需要用户介入操作,如何避免: 首先引进 [DllImport("urlmon.dll", CharSet = Cha ...
- [转载]关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类 ...
- 【WCF--初入江湖】07 分布式事务
07 分布式事务 一.前言 [1]理解事务特性 [2]掌握TransactionFlow 特性 [3]掌握WCF中的事务属性 TransactionAutoCompleteOnSessionClose ...
- uva 10313
递推 参考了别人的解法 dp[i][j] 表示价值为i用j个硬币可以有多少种方法 dp[j][k] += dp[j-i][k-1] 意思是多加一枚价值为i的硬币,加上价值为j-i用k-1个硬币的总 ...
- Sqrt函数高效实现
转自一个Sqrt函数引发的血案 我们平时经常会有一些数据运算的操作,需要调用sqrt,exp,abs等函数,那么时候你有没有想过:这个些函数系统是如何实现的?就拿最常用的sqrt函数来说吧,系统怎么来 ...
- DevOps 和技术债务偿还自动化
当企业想要迁移到一个 DevOps 模型时,经常需要偿还高等级的技术债务 说得更明确一点,机构往往陷入「技术债务的恶性循环」中,以至于任何迅速.敏捷的迁移方式都无法使用.这是技术债务中的希腊债务危机水 ...