BZOJ1628: [Usaco2007 Demo]City skyline
1628: [Usaco2007 Demo]City skyline
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 256 Solved: 210
[Submit][Status]
Description
sets. They can see the skyline of the distant city. Bessie wonders
how many buildings the city has. Write a program that assists the
cows in calculating the minimum number of buildings in the city,
given a profile of its skyline.
The city in profile is quite dull architecturally, featuring only
box-shaped buildings. The skyline of a city on the horizon is
somewhere between 1 and W units wide (1 <= W <= 1,000,000) and
described using N (1 <= N <= 50,000) successive x and y coordinates
(1 <= x <= W, 0 <= y <= 500,000), defining at what point the skyline
changes to a certain height.
An example skyline could be:
..........................
.....XX.........XXX.......
.XXX.XX.......XXXXXXX.....
XXXXXXXXXX....XXXXXXXXXXXX
and would be encoded as (1,1), (2,2), (5,1), (6,3), (8,1), (11,0), (15,2),
(17,3), (20,2), (22,1).
给我们一个由一些矩形构造出来的图,我们需要找到最少矩形的块数来覆盖它
但是这个输入比较奇怪,针对上图,解释如下:
1.1代表在第一列,有高度为1的矩形,矩形由"X"组成.这个矩形有多宽呢,这里并没有告诉你
2.2代表在第二列,有高度为2的矩形,这就间接告诉了你,前面那个矩形有多宽,宽度即2-1
5.1代表在第五列,有高度为1的矩形,这就间接告诉了你,前面那个矩形有多宽,宽度即5-2
This skyline requires a minimum of 6 buildings to form; below is
one possible set of six buildings whose could create the skyline
above:
.......................... ..........................
.....22.........333....... .....XX.........XXX.......
.111.22.......XX333XX..... .XXX.XX.......5555555.....
X111X22XXX....XX333XXXXXXX 4444444444....5555555XXXXX
..........................
.....XX.........XXX.......
.XXX.XX.......XXXXXXX.....
XXXXXXXXXX....666666666666
Input
* Lines 2..N+1: Two space separated integers, the x and y coordinate
of a point where the skyline changes. The x coordinates are
presented in strictly increasing order, and the first x
coordinate will always be 1.
Output
skyline.
Sample Input
1 1
2 2
5 1
6 3
8 1
11 0
15 2
17 3
20 2
22 1
INPUT DETAILS:
The case mentioned above
Sample Output
HINT
Source
题解:
cf原题?完全忘了。。。
比较巧妙。首先应该知道 ans<=n,然后考虑ans<n什么情况下会出现?
显然应该是 有两块相同高度的积木,并且这两块积木中间没有比它们低的积木!
那就是单调栈了。
发现OI真是有时候不是看你会不会什么算法,而是你能不能想到某个算法。
代码:
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<string>
#define inf 1000000000
#define maxn 50000+100
#define maxm 500+100
#define eps 1e-10
#define ll long long
#define pa pair<int,int>
#define for0(i,n) for(int i=0;i<=(n);i++)
#define for1(i,n) for(int i=1;i<=(n);i++)
#define for2(i,x,y) for(int i=(x);i<=(y);i++)
#define for3(i,x,y) for(int i=(x);i>=(y);i--)
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();}
return x*f;
}
int a[maxn],sta[maxn],n,m;
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
n=read();m=read();
for1(i,n)a[i]=read(),a[i]=read();
int top=,ans=n;
for1(i,n)
{
while(a[sta[top]]>a[i])top--;
if(a[sta[top]]==a[i])ans--;else sta[++top]=i;
}
printf("%d\n",ans);
return ;
}
BZOJ1628: [Usaco2007 Demo]City skyline的更多相关文章
- bzoj1628 [Usaco2007 Demo]City skyline(单调栈)
Description Input 第一行给出N,W 第二行到第N+1行:每行给出二个整数x,y,输入的x严格递增,并且第一个x总是1 Output 输出一个整数,表示城市中最少包含的建筑物数量 Sa ...
- 【BZOJ】1628 && 1683: [Usaco2007 Demo]City skyline 城市地平线(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=1628 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- BZOJ 1628 [Usaco2007 Demo]City skyline:单调栈
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1628 题意: 题解: 单调栈. 单调性: 栈内元素高度递增. 一旦出现比栈顶小的元素,则表 ...
- bzoj 1628: [Usaco2007 Demo]City skyline【贪心+单调栈】
还以为是dp呢 首先默认答案是n 对于一个影子,如果前边的影子比它高则可以归进前面的影子,高处的一段单算: 和他一样高的话就不用单算了,ans--: 否则入栈 #include<iostream ...
- BZOJ1629: [Usaco2007 Demo]Cow Acrobats
1629: [Usaco2007 Demo]Cow Acrobats Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 601 Solved: 305[Su ...
- 1645: [Usaco2007 Open]City Horizon 城市地平线
1645: [Usaco2007 Open]City Horizon 城市地平线 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 315 Solved: ...
- BZOJ_1654_[Usaco2007 Open]City Horizon 城市地平线_扫描线
BZOJ_1654_[Usaco2007 Open]City Horizon 城市地平线_扫描线 Description N个矩形块,交求面积并. Input * Line 1: A single i ...
- Leetcode 807 Max Increase to Keep City Skyline 不变天际线
Max Increase to Keep City Skyline In a 2 dimensional array grid, each value grid[i][j] represents th ...
- 【BZOJ1630/2023】[Usaco2007 Demo]Ant Counting DP
[BZOJ1630/2023][Usaco2007 Demo]Ant Counting 题意:T中蚂蚁,一共A只,同种蚂蚁认为是相同的,有一群蚂蚁要出行,个数不少于S,不大于B,求总方案数 题解:DP ...
随机推荐
- 深入理解C#第二版笔记
基础知识 委托 如果代码想要执行操作,但不知道操作细节,一般可以使用委托.例如:Thread类之所以知道要在一个新线程里运行什么,唯一的原因就是在启动新线程时,向它提供了一个ThreadStart委托 ...
- Demon_Tank (坦克移动发射子弹)
using UnityEngine; using System.Collections; public class Tank : MonoBehaviour { //子弹预设体 public Game ...
- ios 绘制wav波形图
最近研究了如何在iOS上绘制wav波形图.查了很多资料,都没能找到一个很完整的介绍,我这里总结一下一些经验. 首先需要了解wav的这3个重要指标:采样率.采样位数.声道数.下面以16KHz, 16Bi ...
- 实现C++模板类头文件和实现文件分离的方法
如何实现C++模板类头文件和实现文件分离,这个问题和编译器有关. 引用<<C++primer(第四版)>>里的观点:1)标准C++为编译模板代码定义了两种模型:“包含”模型和“ ...
- speex的基本编码和解码流程
最近在研究speex的编码和解码流程 之前在IM上用到的都是发语音片段,这个很简单,只需要找到googlecode上gauss的代码,然后套一下就可以用了. 不过googlecode要关闭,有人将他导 ...
- Python学习--07迭代器、生成器
迭代 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). Python里使用for...in来迭代. 常用可迭代对象有 ...
- java开发的web下载大数据时的异常处理
同事用java开发了一个系统,其中有一个功能是下载大约10万笔数据到Excel中.当上线后,很多用户反映下载数据量大的时候就不能成功,但有时可以,所以结论就是系统不稳定,这个问题拖了很久没有解决. 在 ...
- (转)SQL NEWID()随机函数
从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by newid()order by 一般是根据某一字段排序,newid()的返回值 是uniqueidenti ...
- SQL从入门到基础 - 05 数据分组、Having语句
一.数据分组 1. 按照年龄进行分组统计各个年龄段的人数: Select FAge,count(*) from T_Employee group by FAge; 2. Group by子句必须放到w ...
- Multipatch对象
Multipatch对象是 TriangleStrip 和TriangleFan, Trangle,Ring对象的集合 TriangleStrip TriangleFan Trangle