称号:

TIANKENG’s restaurant

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)

Total Submission(s): 249    Accepted Submission(s): 125

Problem Description
TIANKENG manages a restaurant after graduating from ZCMU, and tens of thousands of customers come to have meal because of its delicious dishes. Today n groups of customers come to enjoy their meal, and there are Xi persons
in the ith group in sum. Assuming that each customer can own only one chair. Now we know the arriving time STi and departure time EDi of each group. Could you help TIANKENG calculate the minimum chairs he needs to prepare so that every customer can take a
seat when arriving the restaurant?

 
Input
The first line contains a positive integer T(T<=100), standing for T test cases in all.



Each cases has a positive integer n(1<=n<=10000), which means n groups of customer. Then following n lines, each line there is a positive integer Xi(1<=Xi<=100), referring to the sum of the number of the ith group people, and the arriving time STi and departure
time Edi(the time format is hh:mm, 0<=hh<24, 0<=mm<60), Given that the arriving time must be earlier than the departure time.



Pay attention that when a group of people arrive at the restaurant as soon as a group of people leaves from the restaurant, then the arriving group can be arranged to take their seats if the seats are enough.
 
Output
For each test case, output the minimum number of chair that TIANKENG needs to prepare.
 
Sample Input
2
2
6 08:00 09:00
5 08:59 09:59
2
6 08:00 09:00
5 09:00 10:00
 
Sample Output
11
6
 

解题思路:

转换为RMQ问题,1天24h,1440min;a[i]表示第i分钟的人数,n表示时间[t1,t2)之间来的人数,对这个区间内的a[i]+n,最后求的是a[i]的最大值。

解法1:模拟

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define clr(a) memset(a, 0, sizeof(a))
#define rep(i,s,t) for(int i = s; i <= t; ++i)
#define per(i,s,t) for(int i = s; i >= t; --i) const int MAXN = 1450;
int t, n, a[MAXN]; int main()
{
scanf("%d", &t);
while(t--)
{
clr(a);
scanf("%d", &n);
int num, h1, m1, h2, m2;
rep(i,0,n-1)
{
scanf("%d%d:%d%d:%d", &num, &h1, &m1, &h2, &m2);
int s1 = h1 * 60 + m1, s2 = h2 * 60 + m2;
rep(j,s1,s2-1) a[j] += num;
}
int ans = -1;
rep(i,0,MAXN-1) ans = max(ans,a[i]);
printf("%d\n", ans);
}
return 0;
}

解法2:线段树(ZKW)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define clr(a) memset(a, 0, sizeof(a))
#define rep(i,s,t) for(int i = s; i <= t; ++i)
#define per(i,s,t) for(int i = s, i >= t; --i) const int M = 1<<11, MAXN = 1440;
int icase, n, a[M << 1]; void Add_x(int s, int t, int x)
{
int b = 0;
for(s=s+M-1, t=t+M+1; s^t^1; s>>=1, t>>=1)
{
if(~s&1) a[s^1] += x;
if( t&1) a[t^1] += x;
b = max(a[s], a[s^1]), a[s]-=b, a[s^1]-=b, a[s>>1]+=b;
b = max(a[t], a[t^1]), a[t]-=b, a[t^1]-=b, a[t>>1]+=b;
// printf("%d %d %d %d\n", s, t, a[s^1], a[t^1]);
}
for( ; s > 1; s>>=1)
b = max(a[s], a[s^1]), a[s]-=b, a[s^1]-=b, a[s>>1]+=b;
} int Max(int s, int t)
{
int lans = 0, rans = 0, ans = 0;
for(s=s+M-1,t=t+M+1; s^t^1; s>>=1, t>>=1)
{
lans+=a[s], rans+=a[t];
if(~s&1) lans = max(lans, a[s^1]);
if( t&1) rans = max(rans, a[t^1]);
// printf("%d %d %d %d\n", s, t, lans, rans);
}
ans = max(lans+a[s], rans+a[t]);
while(s>1) ans+=a[s>>=1];
return ans;
} void show()
{
for(int i = 0; i < M; i++)
printf("%d ", a[i]);
printf("\n");
} int main()
{
scanf("%d", &icase);
while(icase--)
{
scanf("%d", &n); clr(a);
int num, h1, m1, h2, m2;
for(int i = 0; i < n; ++i)
{
scanf("%d%d:%d%d:%d", &num, &h1, &m1, &h2, &m2);
int s1 = h1 * 60 + m1, s2 = h2 * 60 + m2;
Add_x(1+s1, s2, num);
}
// show();
printf("%d\n", Max(1,1440));
}
return 0;
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

HDOJ 4883 TIANKENG’s restaurant的更多相关文章

  1. hdoj 4883 TIANKENG’s restaurant【贪心区间覆盖】

    TIANKENG’s restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/O ...

  2. HDU 4883 TIANKENG’s restaurant Bestcoder 2-1(模拟)

    TIANKENG's restaurant Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/O ...

  3. 杭电 4883 TIANKENG’s restaurant (求饭店最少需要座椅)

    Description TIANKENG manages a restaurant after graduating from ZCMU, and tens of thousands of custo ...

  4. HDU 4883 TIANKENG’s restaurant

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4883 解题报告:一家餐馆一天中有n波客人来吃饭,第 i 波  k 客人到达的时间是 s ,离开时的时间 ...

  5. HDU 4883 TIANKENG’s restaurant (贪心)

    链接:pid=4883">带我学习.带我飞 第一次BC,稳挂,WA n多次.今天又一次做了一下 略挫 #include <iostream> #include <cs ...

  6. hdu4886 TIANKENG’s restaurant(Ⅱ) (trie树或者模拟进制)

    TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 130107/65536 K (Ja ...

  7. HDU 4886 TIANKENG’s restaurant(Ⅱ) ( 暴力+hash )

    TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others)    Memory Limit: 130107/65536 K (Ja ...

  8. TIANKENG’s restaurant HDU - 4883 (暴力)

    TIANKENG manages a restaurant after graduating from ZCMU, and tens of thousands of customers come to ...

  9. HDU 4883 Best Coder Round 2 TIANKENG’s restaurant 解读

    有一组数据是在客人到达和出发时间,问:多少把椅子的能力,以满足所有客人的需求,可以有一个地方坐下要求. 有些人甚至开始考虑暴力法,这些数据是少,其实这个问题很多数据, 暴力需求O(n*n)的时间效率, ...

随机推荐

  1. 基于visual Studio2013解决算法导论之023队列实现(基于数组)

     题目 基于数组的队列 解决代码及点评 #include <stdio.h> #include <stdlib.h> #include <time.h> #i ...

  2. 凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网

    凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网 凡客副总裁被曝离职:或因IPO受阻 2013年05月07日 00:56   每日经济新闻    我有话说     每经 ...

  3. C++ 中mallon动态分配内存大小用法

    #include<iostream> using namespace std; int main(){ char *s; int n; cin>>n; s= (char *) ...

  4. [Android] Activity 重复使用

    Intent intent = new Intent(A.this, B.class); intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | ...

  5. Tri_integral Summer Training 9 总结

    比赛链接 A B C D H I J K 多灾多难的 Summer Training 9,前一天挂了一场比赛,结果题一半不能做,于是打了一个小时就放弃了.之后的两场Summer Training 9一 ...

  6. 基于visual Studio2013解决C语言竞赛题之0908文件合并

       题目

  7. hdu1104 Remainder bfs找算式是否有解……

    须要注意的是,进行模运算剪枝-- #include<iostream> #include<queue> #include<cstdlib> #include< ...

  8. 谈论Java原子变量和同步的效率 -- 颠覆你的生活

    我们认为,由于思维定式原子变量总是比同步运行的速度更快,我想是这样也已经,直到实现了ID在第一次测试过程生成器不具有在这样一个迷迷糊糊的东西. 测试代码: import java.util.Array ...

  9. Swift - 设置应用程序图标的提醒个数(右上角小红圈)

    使用UILocalNotification除了可以实现本地消息的推送功能(可以设置推送内容,推送时间,提示音),还可以设置应用程序右上角的提醒个数. 下面演示如何设置,效果图如下: --- AppDe ...

  10. 用内存流 文件流 资源生成客户端(Delphi开源)

    正文:很多木马生成器就是用的内存流和文件流生成客户端的,废话不多说了,代码如下: unit Main; interface usesWindows, Messages, SysUtils, Varia ...