hdu4884TIANKENG’s rice shop(模拟)

题目:hdu4884TIANKENG’s rice shop(模拟)

题目大意:一家餐厅买炒饭,给你客人来的时间和要买的炒饭的数量种类,并且也知道炒一次炒饭最多的分数和时间,问这些客人最早的离开时间。注意:每次炒饭的那段时间是不接单的。

解题思路:模拟。题意好坑,还有根本不会有23:59 , 00:00这样的输入数据,只是输出可能会跨一天。然后就是模拟了。好恶心的题目。详细的看注释把。

代码:

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

using namespace std;

const int N = 1005;

int n, t, k, m;
int sumT;

struct Cus {

	int t;//进店的时间
	int k;//炒饭的种类
	int num;//数目
	int ans;//离开的时间
} c[N];

int main () {

	int T;
	int H, M;
	scanf ("%d", &T);
	while (T--) {

		scanf ("%d%d%d%d", &n, &t, &k, &m);
		for (int i = 0; i < m; i++) {
			scanf ("%d:%d%d%d", &H, &M, &c[i].k, &c[i].num);
			c[i].t = H * 60 + M;//按分钟计算
			c[i].ans = -1;
		}

		sumT = c[0].t;
		for (int i = 0; i < m; i++) {

			if (c[i].ans != -1)
				continue;
			int K = (c[i].num + k - 1) / k;//满足这位客人并且炒尽量多的炒饭
			int have = K * k;
			int tmp = max (sumT, c[i].t) + (K - 1) * t;//最后一次炒饭的时间或者下一个客人来的时间
			for (int j = i; j < m; j++) {//如果后面的客人有点相同的炒饭的并且来的时间不晚于最后一次炒饭的时间的话,那么就可以将当前剩余的炒饭给这位客人,剩下的部分等轮到他再说。

				if (c[j].t > tmp || !have)
					break;
				if (c[j].k == c[i].k) {

					int mm = min (c[j].num, have);
					c[j].num -= mm;
					have -= mm;
				}
				if (c[j].num == 0 && c[j].ans == -1)
					c[j].ans = tmp + t;
			}
			sumT = tmp + t;
		}
		for (int i = 0; i < m; i++)
			printf ("%02d:%02d\n",(c[i].ans / 60) % 24, c[i].ans % 60); //注意可能有跨过一天的情况
		if (T)
			printf ("\n");
	}
	return 0;
}
时间: 2024-10-11 04:57:42

hdu4884TIANKENG’s rice shop(模拟)的相关文章

HDU TIANKENG’s rice shop(模拟)

HDU 4884 TIANKENG's rice shop 题目链接 题意:模拟题.转一篇题意 思路:就模拟就可以.注意每次炒完之后就能够接单 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 1005; int T, n, t, k, m; struct Person { int t, p, num, ans; } p[N];

[ACM] HDU 4884 TIANKENG’s rice shop (模拟)

TIANKENG's rice shop Problem Description TIANKENG managers a pan fried rice shop. There are n kinds of fried rice numbered 1-n. TIANKENG will spend t time for once frying. Because the pan is so small, TIANKENG can fry k bowls of fried rice with same

hdu 4884 TIANKENG’s rice shop(模拟)

# include <cstdio> # include <algorithm> # include <cstring> # include <cstdlib> using namespace std; int max(int a,int b) { return a>b?a:b; } int main() { int T,n,t,k,m,i,hh,min,id,num,x; int last[1010];//最后一次開始炒饭的时间 int cot[10

hdu4884 TIANKENG’s rice shop【模拟】

TIANKENG's rice shop Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 345    Accepted Submission(s): 71 Problem Description TIANKENG managers a pan fried rice shop. There are n kinds of fried ri

【HDOJ】4884 TIANKENG&#39;s rice shop

简单模拟,注意并不是完全按照FIFO的顺序.比如第i个人的id为k,那么就算第i+1人的id不为k,也会检查他后续的排队人是否有id为k的. 1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 5 #define MAXN 1005 6 7 typedef struct { 8 int tt; 9 int id; 10 int num; 11 int ans; 12 } need_st; 13

TIANKENG’s rice shop

Problem Description TIANKENG managers a pan fried rice shop. There are n kinds of fried rice numbered 1-n. TIANKENG will spend t time for once frying. Because the pan is so small, TIANKENG can fry k bowls of fried rice with same kind at most. Assumin

URAL1795. Husband in a Shop(模拟,首次探访俄罗斯的oj)

1795. Husband in a Shop Time limit: 1.0 second Memory limit: 64 MB Mark comes home after a day of hard work. His wife, instead of feeding him, sends him to buy some bread. When Mark comes to a local shop, there is a long line of equally unhappy husba

spring实现读写分离

(转自:http://www.cnblogs.com/surge/p/3582248.html) 现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验.我们通常的做法就是把查询从主库中抽取出来,采用多个从库,使

Spring 实现数据库读写分离

现在大型的电子商务系统,在数据库层面大都采用读写分离技术,就是一个Master数据库,多个Slave数据库.Master库负责数据更新和实时数据查询,Slave库当然负责非实时数据查询.因为在实际的应用中,数据库都是读多写少(读取数据的频率高,更新数据的频率相对较少),而读取数据通常耗时比较长,占用数据库服务器的CPU较多,从而影响用户体验.我们通常的做法就是把查询从主库中抽取出来,采用多个从库,使用负载均衡,减轻每个从库的查询压力. 采用读写分离技术的目标:有效减轻Master库的压力,又可以