UVALive 4244 Party Party Party(HDU 2779 && Sicily 1663)

2 篇文章 0 订阅
2 篇文章 0 订阅

Constraints

Time Limit: 1 secs, Memory Limit: 32 MB

Description

Emma has just graduated high school and it is the custom for the new graduates to throw parties for themselves and invite everyone in school to attend. Naturally, Emma wishes to attend as many parties as possible. This is not such a problem on a weekday since usually there are only two or three parties in the evening. But, Saturdays are packed! Typically some parties start at 8 AM (breakfast is served) while others might end at midnight (much to the annoyance of the neighbors). Emma naturally wants to know how many parties she can attend.

Each party has a starting and stopping time, which are on the hour. These are listed via a 24-hour clock. For example, a party might start at 10 AM (10) and end at 2 PM (14). The earliest a party can start is 8 AM (8) and the latest it can end is midnight (24). In order not to be rude, Emma stays at each party at least one half hour and will consider traveling time between parties to be instantaneous. If there are times during the day when there are no parties to attend, she'll simply go home and rest.

Input

There will be multiple test cases. Each test case starts with a line containing an integer p (≤100) indicating the number of parties on the given day. (A value of p = 0 indicates end of input.) The following p lines are each of the form s e , both integers where 8≤s < e≤24 , indicating a party that starts at time s and ends at time e . Note there may be multiple parties with the same starting and ending time.

Output

For each input set output a line of the form


On day d Emma can attend as many as n parties.


where you determine the value of n and d is the number of the test case starting at 1.

Sample Input

8
12 13
13 14
12 13
9 10
9 10
12 13
12 14
9 11
3
14 15
14 15
14 15
0

Sample Output

On day 1 Emma can attend as many as 7 parties.
On day 2 Emma can attend as many as 2 parties.

Solution

题意是给出n个party的开始和结束时间,至少在每个party呆半个小时,求最多可以参加多少个party。

可以比较容易的想到是简单的贪心,按party时间从短到长排序,依次去参加每一个。

注意在时间上做标记。


#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

int s[105], e[105], r[105];
bool times[105];

bool cmp(const int a, const int b)
{
  return e[a] - s[a] < e[b] - s[b];
}

int main()
{
  int p, ca = 0;

  while (scanf("%d", &p) == 1 && p)
  {
    int i, j, c = 0;
    memset(times, 0, sizeof(times));

    for (i = 0; i < p; ++i)
    {
      scanf("%d%d", &s[i], &e[i]);
      //方便给时间做标记,第n个半小时
      s[i] *= 2;
      e[i] *= 2;
      r[i] = i;
    }
    sort(r, r + p, cmp);

    for (i = 0; i < p; ++i)
    {
      int t = r[i];
      for (j = s[t]+1; j <= e[t]; ++j) if (!times[j])//第j个半小时是空闲的
      {
        times[j] = true;
        ++c;
        break;
      }
    }
    printf("On day %d Emma can attend as many as %d parties.\n", ++ca, c);
  }

  return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值