http://poj.org/problem?id=2376

Cleaning Shifts
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 12604   Accepted: 3263

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), the first being shift 1 and the last being shift T.

Each cow is only available at some interval of times during the day for work on cleaning. Any cow that is selected for cleaning duty will work for the entirety of her interval.

Your job is to help Farmer John assign some cows to shifts so that (i) every shift has at least one cow assigned to it, and (ii) as few cows as possible are involved in cleaning. If it is not possible to assign a cow to each shift, print -1.

Input

* Line 1: Two space-separated integers: N and T

* Lines 2..N+1: Each line contains the start and end times of the interval during which a cow can work. A cow starts work at the start time and finishes after the end time.

Output

* Line 1: The minimum number of cows Farmer John needs to hire or -1 if it is not possible to assign a cow to each shift.

Sample Input

3 10
1 7
3 6
6 10

Sample Output

2

Hint

This problem has huge input data,use scanf() instead of cin to read data to avoid time limit exceed.

INPUT DETAILS:

There are 3 cows and 10 shifts. Cow #1 can work shifts 1..7, cow #2 can work shifts 3..6, and cow #3 can work shifts 6..10.

OUTPUT DETAILS:

By selecting cows #1 and #3, all shifts are covered. There is no way to cover all the shifts using fewer than 2 cows.

 
 
分析:
题意就是给你N段小区间 [n , m]和一个T,T代表大区间[1 ,T] , 要求你找出最少使用小区间完全覆盖大区间。
一开始一直WA,因为理解错了“完全覆盖”的概念。即是下面的数据:
      10      //3代表小区间个数,10代表大区间长度。
    
    
    

上面的数据我的程序输出的是:-1

因为有两个区间没有“完全覆盖”,[5 ,6]和[8 ,9]。

但是正确答案是 3 。

WA代码:

 #include<cstdio>
#include<algorithm>
using namespace std;
struct P
{
int x,y;
bool operator < (const P & p) const
{
return x < p.x || (x == p.x && y > p.y);
}
}a[]; int main()
{
int n,t;
while(~scanf("%d %d",&n,&t))
{
for(int i = ;i < n;i++)
scanf("%d %d",&a[i].x,&a[i].y);
sort(a ,a + n);
int res = ,s;
if(a[].x > )
printf("-1\n");
else
{
s = a[].y;
for(int i = ;i < n && s < t;)
{
int tmp = ;
while(i < n && a[i].x <= s)
{
tmp = max(tmp , a[i].y);
i++;
}
if(tmp > s)
{
s = tmp;
res++;
}
else
break;
}
}
if(s >= t)
printf("%d\n",res);
else
printf("-1\n");
}
return ;
}

AC代码:

 #include<cstdio>
#include<algorithm>
using namespace std; struct P{
int x,y;
bool operator < (const P & p) const {
return x < p.x || (x == p.x && y > p.y);
}
}a[]; int main() {
int n,t;
while(~scanf("%d %d",&n,&t)) {
for(int i = ;i < n;i++)
scanf("%d %d",&a[i].x,&a[i].y); sort(a ,a + n); int res = ,s;
if(a[].x > ) {
printf("-1\n");
continue;
} else {
s = a[].y;
for(int i = ;i < n && s < t;) {
int tmp = ;
while(i < n && a[i].x <= s + ) {
tmp = max(tmp , a[i].y);
i++;
}
if(tmp > s) {
s = tmp;
res++;
} else break;
}
} if(s >= t) {
printf("%d\n",res);
} else {
printf("-1\n");
}
}
return ;
}

poj 2376 Cleaning Shifts的更多相关文章

  1. POJ 2376 Cleaning Shifts(轮班打扫)

    POJ 2376 Cleaning Shifts(轮班打扫) Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] Farmer ...

  2. POJ 2376 Cleaning Shifts 贪心

    Cleaning Shifts 题目连接: http://poj.org/problem?id=2376 Description Farmer John is assigning some of hi ...

  3. 【原创】poj ----- 2376 Cleaning Shifts 解题报告

    题目地址: http://poj.org/problem?id=2376 题目内容: Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K ...

  4. POJ 2376 Cleaning Shifts【贪心】

    POJ 2376 题意: 给出一给大区间和n各小区间,问最少可以用多少小区间覆盖整个大区间. 分析: 贪心法.设t为当前所有已确定区间的最右端,那我们可以每次都取所有可选的小区间(左端点<=t+ ...

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

    Cleaning Shifts Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some clea ...

  6. poj 2376 Cleaning Shifts 贪心 区间问题

    <pre name="code" class="html"> Cleaning Shifts Time Limit: 1000MS   Memory ...

  7. poj 2376 Cleaning Shifts 最小区间覆盖

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 40751   Accepted: 9871 ...

  8. poj 2376 Cleaning Shifts(贪心)

    Description Farmer John <= N <= ,) cows to <= T <= ,,), the first being shift and the la ...

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

    Description Farmer John is assigning some of his N (1 <= N <= 25,000) cows to do some cleaning ...

随机推荐

  1. XD, XR, DR 股票

    股权登记日与除权除息日 所以,如果投资者想得到一家上市公司的分红.配股权,就必须弄清这家公司的股权登记日在哪一天,否则就会失去分红.配股的机会. 股权登记日后的第一天就是除权日或除息日,这一天或以后购 ...

  2. iOS Runtime学习笔记

    Associated Objects: @interface NSObject (AssociatedObject) @property (nonatomic, strong) id associat ...

  3. 关于activity的生命周期的随笔

    在activity的生命周期中,我总是容易混淆,onstart和on resume ,on pause和onstop 原来这个都是一对的. onstart 对应 onstop ,意义在于使页面显示出来 ...

  4. [Java] 位运算

    https://ckjoker.github.io/2015/03/01/Java-bit-primary/

  5. WordPress 的 Google 字体问题解决办法

    在国内访问的时候,WordPress 里面引用的 google 字体可能会导致加载速度变得很慢. 要修改的地方有(我使用的版本是 4.0): wp-includes 里面的 script-loader ...

  6. C#读写配置文件

    .net有两种程序,一个是web程序,另外一种是app客户端程序,这两种程序的配置文件读写模式不同,web程序是直接读写马上生效.app客户端程序比如刷新加载一次. System.Configurat ...

  7. c#操作mysql积累

    1,连接字符串 Server=localhost;port=;User ID=root;password=admin;database=;charset=utf8;Allow User Variabl ...

  8. *HDU 1385 最短路 路径

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  9. PHP入门介绍与环境配置

    浏览目录: 一.PHP的背景和优势: 二.PHP原理简介: 三.PHP运行环境配置: 四.编写简单的PHP代码以及测试. 一.PHP的背景和优势 1.1   什么是PHP? PHP是能让你生成动态网页 ...

  10. 一般处理程序如何获取session值

    1.要在一般处理程序中获取其他页面的session值,需要引用名空间: using System.Web.SessionState; 2.然后继承一个接口:IRequiresSessionState ...