[贪心] poj 2376 Cleaning Shifts

题意:

给n个线段,问你覆盖满[1,T]内的每个点,最少需要多少条线段。

思路:

贪心,按照x坐标升序,y坐标降序排。

默认先放入第一条。

然后根据从属关系继续放线段。

注意的一点是 [1,2]和[3,4]就可以覆盖满[1,4]了。

然后注意因为默认放入了第一条,所第一条的状态要特判。

包括 第一条如果是[1,T]的话 输出1.

代码:

#include"cstdlib"
#include"cstdio"
#include"cstring"
#include"cmath"
#include"queue"
#include"algorithm"
#include"iostream"
#include"map"
using namespace std;
struct node
{
    int x,y;
}p[26000];
int cmp(node a,node b)
{
    if(a.x==b.x)
    {
        if(a.y>b.y) return 1;
        return 0;
    }
    if(a.x<b.x) return 1;
    return 0;
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=-1)
    {
        for(int i=0;i<n;i++) scanf("%d%d",&p[i].x,&p[i].y);
        sort(p,p+n,cmp);
        if(p[0].x!=1)
        {
            puts("-1");
            continue;
        }
        int xx=0;
        int yy=p[0].y;
        int ans=1;
        for(int i=1;i<n;i++)
        {
            if(p[i].y<yy) continue;
            if(yy>=m) break;
            if(p[i].x>yy+1)
            {
                ans=-1;
                break;
            }
            if(p[i].x>xx+1)
            {
                ans++;
                xx=yy;
                yy=p[i].y;
            }
            else
            {
                yy=p[i].y;
            }
        }
        if(yy<m) ans=-1;
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-11-08 12:13:21

[贪心] poj 2376 Cleaning Shifts的相关文章

POJ 2376 Cleaning shifts 贪心 基础题

Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13042   Accepted: 3373 Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one co

POJ - 2376 Cleaning Shifts 贪心(最小区间覆盖)

Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up and has divided the day into T shifts (1 <= T <= 1,000,000

[POJ 2376] Cleaning Shifts

Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12874   Accepted: 3331 Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one co

ACM学习历程——POJ 2376 Cleaning Shifts(贪心)

Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up and has divided the day into T shifts (1 <= T <= 1,000,000), t

poj 2376 Cleaning Shifts(贪心)

Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up and has divided the day into T shifts (1 <= T <= 1,000,000), t

POJ 2376 Cleaning Shifts (贪心)

Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up and has divided the day into T shifts (1 <= T <= 1,000,000), the first bei

POJ 2376 Cleaning Shifts (贪心,区间覆盖)

题意:给定1-m的区间,然后给定n个小区间,用最少的小区间去覆盖1-m的区间,覆盖不了,输出-1. 析:一看就知道是贪心算法的区间覆盖,主要贪心策略是把左端点排序,如果左端点大于1无解,然后, 忽略小于1的部分(如果有的话),再找最长的区间,然后把这个区间的右端点作为下次寻找的起点, 再找最大区间,直到覆盖到最后. 注意:首先要判断好能不能覆盖,不能覆盖就结束,有可能会提前结束,也要做好判断,我就在这WA了好几次, 悲剧...其他的就比较简单了,不用说了. 代码如下: #include <ios

POJ 2376 Cleaning Shifts(轮班打扫)

Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning chores around the barn. He always wants to have one cow working on cleaning things up and has divided t

POJ 2376 Cleaning Shifts 区间覆盖问题

用例点表达进度 识别用例的状态 根据生命周期要求,识别用例的状态及转移. 典型的如瀑布型,一般依次有如下状态:用例识别,用例确认,用例已设计,用例已编码,用例已测试. 采用测试驱动开发(TDD)的一个例子,依次状态:用例识别,已写测试用例,用例已编码,用例已集成,用例已测试. 最简化用例状态,依次状态:用例识别,用例已集成. 从以上例子可以看到,传统生命周期和敏捷方法都可以得到合适的状态转移图. 设定用例状态的完成度 完成度以百分比表示,表示与工作量成正比的完成程度,0%表示刚开始,工作量投入为