模拟题 矩形

来源:互联网 发布:社会学常用数据库 编辑:程序博客网 时间:2024/06/06 16:11

Description

给出N个矩形,按顺序排成一排. 问最少能用多少张矩形海报可以恰好覆盖住它们.

Input
这里写图片描述

第一行给出数字N,代表有N个矩形.
下面N行,每行给出矩形的长与宽.其值在[1,1000000000]范围内。

Output

输出一个数,表示最少数量的海报数.

Sample Input

5
1 2
1 3
2 2
2 5
1 4
这里写图片描述

Sample Output

4

Hint

【数据规模和约定】

30%的数据,1<=N<=1000,矩形的长宽不超过1000。
100%的数据,1<=N<=100000。

分析

读完之后扫一遍,然后只需对于每一个矩形判断它左面第一个小于等于它高度的矩形的高度是否等于它的高度,如果相等就将海报数减1。

代码

#include <iostream>#include <algorithm>#include <cstdio>#include <cmath>#include <cstring>#define N 1000001int h[N], s[N];int main() {    /*freopen("matrix.in", "r", stdin);    freopen("matrix.out", "w", stdout);*/    int n;    scanf("%d", &n);    for(int i = 1; i <= n; i ++)    scanf("%*d%d", &h[i]);        int k = 0;    int ans = n;    for(int i = 1; i <= n; i++)     {    while(h[i] < s[k])        k -= 1;               if(h[i] == s[k])        {            k -= 1;            ans -= 1;        }        s[++ k] = h[i];    }    printf("%d\n", ans);}
0 0
原创粉丝点击