HDOJ 4883 TIANKENG’s restaurant
称号:
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
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?
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.
2
2
6 08:00 09:00
5 08:59 09:59
2
6 08:00 09:00
5 09:00 10:00
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的更多相关文章
- hdoj 4883 TIANKENG’s restaurant【贪心区间覆盖】
TIANKENG’s restaurant Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/O ...
- 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 ...
- 杭电 4883 TIANKENG’s restaurant (求饭店最少需要座椅)
Description TIANKENG manages a restaurant after graduating from ZCMU, and tens of thousands of custo ...
- HDU 4883 TIANKENG’s restaurant
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4883 解题报告:一家餐馆一天中有n波客人来吃饭,第 i 波 k 客人到达的时间是 s ,离开时的时间 ...
- HDU 4883 TIANKENG’s restaurant (贪心)
链接:pid=4883">带我学习.带我飞 第一次BC,稳挂,WA n多次.今天又一次做了一下 略挫 #include <iostream> #include <cs ...
- hdu4886 TIANKENG’s restaurant(Ⅱ) (trie树或者模拟进制)
TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 130107/65536 K (Ja ...
- HDU 4886 TIANKENG’s restaurant(Ⅱ) ( 暴力+hash )
TIANKENG’s restaurant(Ⅱ) Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 130107/65536 K (Ja ...
- TIANKENG’s restaurant HDU - 4883 (暴力)
TIANKENG manages a restaurant after graduating from ZCMU, and tens of thousands of customers come to ...
- HDU 4883 Best Coder Round 2 TIANKENG’s restaurant 解读
有一组数据是在客人到达和出发时间,问:多少把椅子的能力,以满足所有客人的需求,可以有一个地方坐下要求. 有些人甚至开始考虑暴力法,这些数据是少,其实这个问题很多数据, 暴力需求O(n*n)的时间效率, ...
随机推荐
- Elven Postman(二叉树)
Elven Postman Time Limit: 1500/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)T ...
- 响应式设计:理解设备像素,CSS像素和屏幕分辨率
概述 屏幕分辨率.设备像素和CSS像素这些术语,在非常多语境下,是可互换的,但也因此easy在有差异的地方引起混淆,实际上它们是不同的概念. 屏幕分辨率和设备像素是物理概念,而CSS像素是WEB编程的 ...
- 深度优先搜索(DFS)递归形式改为非递归形式
DFS将递归改为非递归这个方法的需求来自于一道三维积木组合的题目,还在苦苦调试中,暂且不提. 普通的认识对于递归向非递归的转化无非是使用栈,但是结合到深度搜索如何将栈很好利用,如何很好保存现场,都不是 ...
- HDU--杭电--1501--Zipper--深搜、DP都好
Zipper Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- malloc & free
动态分配内存 #include<stdio.h> #include<stdlib.h> int compare_integers(void const *a,void cons ...
- Python 网络编程说明
一.网络知识的一些介绍 socket 是网络连接端点.例如当你的Web浏览器请求www.jb51.net上的主页时,你的Web浏览器创建一个socket并命令它去连接 www.jb51.net的Web ...
- c++ 中CImage类Load函数,路径中含有空格应对策略!
最近,在写一些东西的时候,需要用到CImage类将JPG各式的图片转换成BMP图片,传入的是图片的绝对地址:如C:\Users\Administrator\Documents\Visual Studi ...
- uoj Goodbye Jiawu
这次比赛真是太伤我心了. 比(惨)赛(不)结(忍)果(睹) 完挂感言 uoj round 5已经挂了一次了,没想到还要再挂第二次. 这次比赛的期望得分是\(100+100+100+70+10\)的.没 ...
- Android核心基础(十一)
1.Android的状态栏通知(Notification) 通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: //获取通知管理器 NotificationManager mNotificat ...
- 关于callContext
coding们肯定有这种需求,在程序中,方法一级级调下去,比如A->b->C->D.... ->Z.在调用过程中,希望在调用函数之间传递一些数据,常见的是将特定的数据从高往低处 ...