称号:

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. pojg487-3279电话号码转换(字符映射)

    http://poj.grids.cn/practice/2974 注意输入中连字符可以任意添加和删除. 描述企业喜欢用容易被记住的电话号码.让电话号码容易被记住的一个办法是将它写成一个容易记住的单词 ...

  2. IBM Python 技术专题

    Python 技术专题 Python 是由 Guido van Rossum 开发的,可免费获得的.是一种非常高级的解释型语言.其语法简单易懂,而且面向对象的语义功能强大又灵活,Python 可以广泛 ...

  3. 还是回文(dp)

    还是回文 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 判断回文串很简单,把字符串变成回文串也不难.现在我们增加点难度,给出一串字符(全部是小写字母),添加或删除一个字 ...

  4. BZOJ 2212: [Poi2011]Tree Rotations( 线段树 )

    线段树的合并..对于一个点x, 我们只需考虑是否需要交换左右儿子, 递归处理左右儿子. #include<bits/stdc++.h> using namespace std; #defi ...

  5. C-KMP

    一.BF算法 --传统算法 BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符:若不相等,则比较S的 ...

  6. Spring MVC视图层:thymeleaf vs. JSP

    本文对比了同一Spring MVC工程中相同页面(一个订阅表单)分别采用Thymeleaf和JSP(包括JSP.JSTL.Spring tag lib)两种方式的实现. 本文的所有代码来自一个可运行的 ...

  7. 基于visual Studio2013解决C语言竞赛题之0609矩阵处理

     题目

  8. tcp/ip协议listen函数中backlog參数的含义

    listen函数的定义例如以下所看到的: #include <sys/socket.h> int accept(int sockfd, struct sockaddr * restrict ...

  9. PHP - 遍历文件夹下的所有文件名

    /** * * 函数名:myreaddir($dir) * 作用:读取目录所有的文件名 * 参数:$dir 目录地址 * 返回值:文件名数组 * * */ function myreaddir($di ...

  10. ubuntu 安装LaTex

    使用IDE来使用tex,如TexMaker. 1.到http://www.tug.org/texlive/acquire-netinstall.html 下载texlive. 2.linux下命令行, ...