洛谷题解: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 ...
随机推荐
- [转]javascript实现限制上传文件的大小
本文转自:http://www.micmiu.com/lang/javascript/js-check-filesize/ 目录 基本思路 示例 [一].基本思路 在FireFox.Chrome浏览器 ...
- (转)AIX 5.3安装SSH .
AIX 5.3安装SSH . 原文:http://blog.csdn.net/chunhua_love/article/details/12004845 环境:OS:AIX 5.3SSH: opens ...
- 数据结构之C语言模拟整数数组实现
#include <stdio.h> #include <malloc.h> #include <stdlib.h> typedef struct Arr { in ...
- JavaScript DOM基础总结
上个月在进行百度三面时候,面试官提问JavaScript DOM方法,我回答的有点少,前面太关注JavaScript 兼容性,框架方面,JavaScript 原生DOM基础没有记牢,心中有点遗憾.下来 ...
- CSS display:none和visibility:hidden区别
你知道CSSdisplay:none和visibility:hidden的区别吗,这里和大家分享一下,使用CSS display:none属性后,HTML元素(对象)的宽度.高度等各种属性值都将&qu ...
- secureCRT配置——针对Home、End无法使用
- JQ学习总结之选择器
一.window.onload 和 $(document).ready()区别 1)window.onload 执行时机:必须等待网页中所有的内容加载完毕后(包括图片)才能执行. 编写个数:不能同 ...
- 一个ActionResult中定位到两个视图—<团委项目>
在使用MVC做项目的时候一般的情况就是一个ActionResult一个视图,这样对应的Return View();就可以找到下面对应的视图,这是根据一个原则,“约定大于配置”,但是我们有的时候需要在一 ...
- Fluent API配置
1.Fluent API配置Model试用行更广 2.使用方法: public class TransferConfig: EntityTypeConfiguration<TransferInf ...
- Python之人工智能:PyAudio 实现录音 自动化交互实现问答
Python 很强大其原因就是因为它庞大的三方库 , 资源是非常的丰富 , 当然也不会缺少关于音频的库 关于音频, PyAudio 这个库, 可以实现开启麦克风录音, 可以播放音频文件等等,此刻我们不 ...