洛谷题解:P1209 【[USACO1.3]修理牛棚 Barn Repair】
原题传送门:https://www.luogu.org/problemnew/show/P1209
首先,这是一道贪心题。
我们先来分析它的贪心策略。
例如,样例:
4 50 18
3
4
6
8
14
15
16
17
21
25
26
27
30
31
40
41
42
43
它们之间的差是:
1 2 2 6 1 1 1 4 4 1 1 3 1 9 1 1 1
既然我们要让木板长度最小,那么我们就得空出前m-1个最大的区域,把其他区域累加,再加上一个m(例如3~8的差是8-3=5,而实际木板长度为8-3+1=6,每个木板都多一个,那么m个木板会多出m个)。
代码1(50分代码):
- #include <bits/stdc++.h>
- using namespace std;
- struct node
- {
- int cow,div;
- /*
- cow为该牛所占牛棚编号,
- div为该点与上一点差,
- _为这是一个WA代码,
- */
- }_[];
- int m,s,c;
- bool cmp(node c,node d)
- {
- return c.div>d.div;
- }
- int main()
- {
- int ans=;
- scanf("%d%d%d",&m,&s,&c);
- scanf("%d",&_[].cow);_[].div=;
- for (int i=;i<=c;i++)
- {
- scanf("%d",&_[i].cow);
- _[i].div=_[i].cow-_[i-].cow;
- }
- sort(_+,_+c+,cmp);
- for (int i=m;i<=c;i++) ans+=_[i].div;
- ans+=m;
- printf("%d\n",ans);
- return ;
- }
这是一个50分代码。很显然,问题在于:认为输入的编号一定是升序序列。所以,添加abs和sort,代码为:
代码2(80分代码):
- #include <bits/stdc++.h>
- using namespace std;
- struct node
- {
- int cow,div;
- /*
- cow为该牛所占牛棚编号,
- div为该点与上一点差,
- _为这是一个WA代码。
- */
- }_[];
- int m,s,c;
- bool cmp1(node c,node d)
- {
- return c.cow<d.cow;
- }
- bool cmp2(node c,node d)
- {
- return c.div>d.div;
- }
- int main()
- {
- int ans=;
- scanf("%d%d%d",&m,&s,&c);
- scanf("%d",&_[].cow);
- for (int i=;i<=c;i++)
- scanf("%d",&_[i].cow);
- sort(_+,_+c+,cmp1);
- for (int i=;i<=c;i++) _[i].div=abs(_[i].cow-_[i-].cow);
- sort(_+,_+c+,cmp2);
- for (int i=m;i<=c;i++) ans+=_[i].div;
- ans+=m;
- printf("%d\n",ans);
- return ;
- }
这个代码很容易被认为是AC代码,其实不然。例如,测试点6,出现了m比c大的情况。那么它肯定不能用m个木板去覆盖。这种时候,我们只要在每个点上都摆一个长度为1的木板就行了,或者说,木板总长即为牛的只数。所以,代码如下:
代码3(100分代码):
- //本题解由姆洋题解®提供。姆洋题解,蒟蒻们的题解。
- #include <bits/stdc++.h>
- using namespace std;
- struct node
- {
- int cow,div,_this,_last;
- /*
- cow为该牛所占牛棚编号,
- div为该点与上一点差,
- _this为该点,_last为上一点。
- */
- }_[];
- int m,s,c;
- bool cmp1(node c,node d)
- {
- return c.cow<d.cow;
- }
- bool cmp2(node c,node d)
- {
- return c.div>d.div;
- }
- int main()
- {
- int ans=;
- scanf("%d%d%d",&m,&s,&c);
- if (m>=c) {printf("%d\n",c);return ;}
- scanf("%d",&_[].cow);_[]._last=;_[]._this=;
- for (int i=;i<=c;i++)
- scanf("%d",&_[i].cow);
- sort(_+,_+c+,cmp1);
- for (int i=;i<=c;i++) _[i].div=abs(_[i].cow-_[i-].cow),_[i]._this=i,_[i]._last=i-;
- sort(_+,_+c+,cmp2);
- for (int i=m;i<=c;i++) ans+=_[i].div;
- ans+=m;
- printf("%d\n",ans);
- return ;
- }
洛谷题解:P1209 【[USACO1.3]修理牛棚 Barn Repair】的更多相关文章
- 洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair
P1209 [USACO1.3]修理牛棚 Barn Repair 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. ...
- P1209 [USACO1.3]修理牛棚 Barn Repair
P1209 [USACO1.3]修理牛棚 Barn Repair 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. ...
- 洛谷 P1209 [USACO1.3]修理牛棚 Barn Repair题解
题目 打死我也没想到是贪心 虽然是lkx写了贪心题解让我去点赞我才写的这道题 神仙思路 首先排好序 假设我们现在只有一块木板 我们做一个差分数组 对这个差分数组排序之后 一次断开最长的区间 m-1次之 ...
- 洛谷P1209 [USACO1.3]修理牛棚 Barn Repair
题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假,所以牛棚没有住满. 牛棚一个紧挨着另一个被排成一行,牛就住在里面过夜. 有些牛棚里有牛 ...
- 洛谷——P1209 [USACO1.3]修理牛棚 Barn Repair
https://www.luogu.org/problem/show?pid=1209 题目描述 在一个夜黑风高,下着暴风雨的夜晚,farmer John的牛棚的屋顶.门被吹飞了. 好在许多牛正在度假 ...
- USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)
usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...
- 洛谷 P2701 [USACO5.3]巨大的牛棚Big Barn Label:二维数组前缀和 你够了 这次我用DP
题目背景 (USACO 5.3.4) 题目描述 农夫约翰想要在他的正方形农场上建造一座正方形大牛棚.他讨厌在他的农场中砍树,想找一个能够让他在空旷无树的地方修建牛棚的地方.我们假定,他的农场划分成 N ...
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
随机推荐
- c++ 控制台输入参数
#include <iostream>#include <string> using namespace std; int main(int argc,char **argv) ...
- MVC分页技术
这个是用的插件分页技术 前台引用和js <script type="text/javascript" src="/js/jquery-1.10.2.min.js&q ...
- js中各种距离clientWidth
1: offsetLeft.offsetTop.offsetHeight.offsetWidth 1.1 偏移参照——定位父级offsetParent offsetParent的定义是:与当前元素 ...
- (C# 基础) 接口
接口是表示一组函数成员,而不实现成员的引用类型.类和结构可以实现接口. 例如BCL声明了一个叫做IComparable的接口,包含了一个CompareTo方法, 但没有实现其方法,用“:”结尾. pu ...
- 关于如何等待一个元素的出现而不用一些笨拙粗暴的time.sleep()方法
我相信这是一个非常大众化的需求,我们需要等待某一个元素的出现以此来让我们的脚本进入到下一个Step,这个等待方法最好能够设置超时时间,然后找到后迅速callback.我们也很幸运!如果你仔细看Sele ...
- sqlalchemy使用tip
https://docs.sqlalchemy.org/en/latest/orm/tutorial.html http://docs.sqlalchemy.org/en/latest/core/sq ...
- springboot 修改和设置 banner
springboot 修改和设置 banner 先上图 修改步骤 1.在src/main/resources下新建一个banner.txt文档 2.通过http://patorjk.com/softw ...
- 关于 no device found for connection ‘ System eth0′问题
在Vmware上面安装CentOS,开机后,使用:service network restart时,会提示一下错误: Shutting down loopback interface: ...
- 笨办法学Python(十六)
习题 16: 读写文件 如果你做了上一个练习的加分习题,你应该已经了解了各种文件相关的命令(方法/函数).你应该记住的命令如下: close – 关闭文件.跟你编辑器的 文件->保存.. 一个意 ...
- 安装国际版firefox(火狐浏览器)并设置语言为中文
访问https://www.mozilla.org/zh-CN/firefox/new/?scene=2下载.安装: 访问https://addons.mozilla.org/zh-CN/firefo ...