种树 (codevs 1653) 题解
【问题描述】
一条街的一边有几座房子。因为环保原因居民想要在路边种些树。路边的地区被分割成块,并被编号为1..n。每个块大小为一个单位尺寸并最多可种一棵树。每个居民想在门前种些树并指定了三个号码b,e,t。这三个数表示该居民想在b和e之间最少种t棵树。当然b<=e,居民必须保证在指定地区不能种多于地区被分割成块数的树,即要求t<=e-b+1。允许居民想种树的各自区域可以交叉。出于资金短缺的原因,环保部门请你求出能够满足所有居民的要求,需要种树的最少数量。
【样例输入】
9
4
1 4 2
4 6 2
8 9 2
3 5 2
【样例输出】
5
【解题思路】
本题用贪心算法,先以b为关键字排序,然后从后往前种,因为这样与后面的重合的可能性才越大,定义一个布尔型数组,每种一棵,就赋为true,最后计算true的数量即可。
【代码实现】
type rec=record
b,e,t:longint;
end;
var a:array[..] of rec;
f:array[..] of boolean;
i,j,n,m,ans:longint;
procedure sort(l,r:longint);
var i,j,x:longint;
y:rec;
begin
i:=l;
j:=r;
x:=a[(l+r) div ].e;
repeat
while a[i].e<x do
inc(i);
while x<a[j].e do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
j:=j-;
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end;
function pd(t:longint):longint;
var i,ans:longint;
begin
ans:=;
for i:=a[t].b to a[t].e do
if f[i] then inc(ans);
exit(ans);
end;//判断当前区间种了几棵树
procedure hh;
var t,tt:longint;
begin
for t:= to n do
begin
if pd(t)<a[t].t then
begin
tt:=a[t].e;f[tt]:=true;
end;
while pd(t)<a[t].t do//还没种完,继续往前种
begin
dec(tt);
f[tt]:=true;
end;
end;
end;
begin
readln(m);
readln(n);
for i:= to n do
with a[i] do
readln(b,e,t);
sort(,n);
hh;
for i:= to m do
if f[i] then
inc(ans);
writeln(ans);
end.
种树 (codevs 1653) 题解的更多相关文章
- 计算系数 (codevs 1137) 题解
		
[问题描述] 给定一个多项式(ax + by)^k,给定a.b.k.n.m,请求出多项式展开后x^n y^m项的系数. [样例输入] 1 1 3 1 2 [样例输出] 3 [解题思路] 本题为NOIP ...
 - 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
		
写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...
 - code1052 地鼠游戏
		
贪心算法,从后往前 来自codevs的题解: 我的纠结思考过程:如果每一秒都没有重复的地鼠出现 那么肯定是一个一个挨着打如果有重复的地鼠 那么要考虑打那个更优 当然是选分值最大的 单纯这样想很合理 但 ...
 - code1006 等差数列
		
我绞尽脑汁想一个更好的算法,然而不能如愿,只好写一个n^3的了 很简单,就是暴力搜索(还好n<100) 先排序,然后循环i=1ton,j=i+1ton 把a[i]a[j]确定为等差数列开始的两个 ...
 - [BZOJ 3144][HNOI 2013] 切糕
		
题目大意 切糕是 (p times q times r) 的长方体,每个点有一个违和感 (v_{x, y, z}).先要水平切开切糕(即对于每个纵轴,切面与其有且只有一个交点),要求水平上相邻两点的切 ...
 - [BZOJ 1412][ZJOI 2009] 狼和羊的故事
		
题目大意 有一个 (n times m) 的网格,每一个格子上是羊.狼.空地中的一种,羊和狼可以走上空地.现要在格子边上建立围栏,求把狼羊分离的最少围栏数. (1 leqslant n, ; m le ...
 - codevs 2602 最短路径问题——良心题解
		
2602 最短路径问题 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 平面上有n个点(n<=100),每个点的坐标均在- ...
 - codevs 1814 最长链题解
		
codevs 1814 最长链题解 题目描述 Description 现给出一棵N个结点二叉树,问这棵二叉树中最长链的长度为多少,保证了1号结点为二叉树的根. 输入描述 Input Descripti ...
 - 洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心)
		
洛谷P1484 种树&洛谷P3620 [APIO/CTSC 2007]数据备份 题解(堆+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/132 ...
 
随机推荐
- Android中 View not attached to window manager错误的解决办法
			
前几日出现这样一个Bug是一个RuntimeException,详细信息是这样子的:java.lang.IllegalArgumentException: View not attached to w ...
 - activity退出
			
这里介绍两种方法:一种把每个activity记住,然后逐一干掉:另一种思路是使用广播.本文来源于网络,如有雷同,那是必须的.写此贴只是为了总结一下常用东东,还望原作者莫怪,本人真不是想侵权. 方法一. ...
 - SparkSQL On Yarn with Hive,操作和访问Hive表
			
转载自:http://lxw1234.com/archives/2015/08/466.htm 本文将介绍以yarn-cluster模式运行SparkSQL应用程序,访问和操作Hive中的表,这个和在 ...
 - mac下的几个命令-黑苹果之路
			
涉及一些文件操作的命令: 1.去掉/加上windows下文件的系统.只读.隐藏等属性,用chflags,nounchg/unchg,nohidden/hidden 2.去掉文件的@属性(这个属性经常导 ...
 - Android开发-Hello World+phonegap(Cordova)
			
想着把IOS的程序在Android上实现一下,尝试Android开发,结果发现Android的开发环境也不好弄.接下来记录下整个过程,耳熟能详的操作就不再赘述,重点记录个人特别的经历: 一.安装jav ...
 - Fragments | Android Developer
			
Definition A Fragment represents a behavior or a potion of user interface in an Activity. You can co ...
 - Bootstrap 3 How-To #1 下载与配置
			
Bootstrap 3 发布了,通过简单的几步,我们就可以使用 Bootstrap 的样式表,图标,以及 javascript 来配置一个简单的站点. 准备 Bootstrap 不仅仅是一个代码集,还 ...
 - 构造一个简单的linux系统
			
1.搭建环境 cd ~/Work/ wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz xz -d linux- ...
 - 学习练习 java 二分查找法
			
package com.hanqi; import java.util.*; public class Test5 { public static void main(String[] args) { ...
 - Android基础总结(3)——UI界面布局
			
Android的UI设计有好几种界面程序编写方式.大体上可分为两大类:一类是利用可视化工具来进行,允许你进行拖拽控件来进行布局:还有一类是编写xml文档来进行布局.这两种方法可以相互转换. 1.常见的 ...