洛谷题解: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 ...
随机推荐
- Java基础04-数据的输入
1.为什么要有数据的输入? 实现人机进行交互 2.什么是数据的输入? 利用扫描仪Scanner进行数据输入 3.怎么使用扫描仪Scanner? (1)放在类声明之前,引入扫描仪 import java ...
- g++ 出现 undefined reference to ......
g++ 出现 undefined reference to ...... 检查/usr/local/lib /usr/lib 发现已经存在相应的库文件 那么,问题可能出现在g++链接次序上,即先链接 ...
- [转]win系统下nodejs安装及环境配置
本文转自:http://www.cnblogs.com/linjiqin/p/3765390.html 第一步:下载安装文件 下载nodejs,官网:http://nodejs.org/downloa ...
- Cinder Columns
http://www.screencast.com/users/xiangxinyong/folders/Smaug http://www.screencast.com/t/SLqCyOwtBRl
- 用Jmeter 测试接口--需要登录怎么办?
一.试用场景---当你测试的接口 需要登录,然后 你又不知道怎么让这测这个接口前登录?这篇文章写得是 用静态的Token 值,来测试需要登录的接口 二.步骤 1 首相用Jmeter 将要测试的接 ...
- 使用codedom自动生成代码
刚刚接触自动代码生成,便小试牛刀,解决了项目中的一些问题. 问题:我们的项目分成很多层次,当增加一个方法的时候,会显得异常繁琐,但每个层次之间的调用大同小异,所以尝试使用代码生成.现在假设有Engin ...
- Integer代码分析
我们都知道Integer是int的封装类,提供了一些类型转换等工具方法,有一个-128-127的缓存,而且是final的. ----------------------------- 干货: Inte ...
- pat1044. Shopping in Mars (25)
1044. Shopping in Mars (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Shop ...
- maven配置好了之后再次开机找不到命令
问题: 昨天还运行的好好的,今天突然又报错了, mvn不是内部或外部命令,也不是可运行程序或批处理文件 原因: 环境配置问题,windows7和windows10稍微有一点不一样,对照下面配置看哪里不 ...
- SublimeText插件autoprefixer : css 添加前续
/* 使用前 */ body { background: linear-gradient(to bottom, #DADADA, #000); } p a { -webkit-border-radiu ...