hdu 3262 09 宁波 现场 C - Seat taking up is tough 暴力

Description

Students often have problems taking up seats. When two students want the same seat, a quarrel will probably begin. 

It will have very bad effect when such subjects occur on the BBS. 
So, we urgently need a seat-taking-up rule. After several days of argument, the rule finally comes out: 
As shown in the figure below, the seats in a classroom form a n×m grid( n rows and m columns), and every cell in the grid represents a seat. The coordinates of the seat in the north-west corner are (1,1) and the coordinates of the seat in the south-east corner seat are (n,m). As you know, some seats make you feel good and some seats don’t. So every seat has a “feeling index”. 

Students can take up seats for himself and his friends. Of course, if a seat is already taken up by a student, it can’t be taken up by others. 
For the convenience of communication between friends, when a student is trying to take up seats, he wants all the seats he needs to be consecutive and in the same row. If he can do that, he takes up all the seats he needs, and save the most western one for himself. For example, if a student wants to take up 3 seats, then taking (2,2),(2,3),(2,4) and saving (2,2) for himself is ok; but taking (2,2),(2,4),(2,5) is invalid because those seats are not consecutive. Under the precondition of accomplishing his seat-taking job, a student always wants the “feeling index” of his seat to be as large as possible. 
However, if a student cannot take up all the seats he needs, he will just try to take up only one seat for himself because he doesn’t want to get into the trouble of explaining “Why they can get seats but I can’t?” to some of his friends. Of course he still wants the “feeling index” of his seat to be as large as possible in that situation. 
Everyone wants to know where are the seats he can take up .This problem seems a little bit complicated for them. So they want you to write a program to solve the problem.

Input

There are several test cases and the input ended by a line of “0 0 0”. 
For each test case: 
The first line contains three integers: n , m and k ( 1 <= n,m<=30, 1<=k<=50). It means that there are n rows of seats in the classroom and there are m seats in every row. k is the number of students who come into the classroom trying to take up seats. 
Following are n lines describing the seats by north to south order .Each line represents a row of seats and contains m integers, indicating the “feeling index” of every seat in that row, by west to east order. “Feeling index” can be fit in a 32-bit integer. 
Then k lines follow (We call them k “student lines”). Each line is in the format of “hh:mm q” ( 0 <= hh < 24, 0 <=mm <= 59, 1<=q<=50 ) meaning that a student comes into the classroom at mm minutes past hh o’clock, trying to take up q seats. mm and hh are all two digit integers with possible leading zero, and q is also an integer. Please note that when a student enters the class room, he begins to do his seat taking job immediately and the job takes no time. 
It is guaranteed that the “feeling index” of every seat is different and no students come into the classroom at the same time.

Output

You should output k lines for each test case, in the order that correspondent to the above mentioned k “student lines” in the input. Each line must contain two integers indicating the coordinates of the seat which is saved by the student for himself. If the student can’t take up any seats, just output a “-1” instead.

Sample Input

5 5 8
11 12 15 14 13
21 22 25 24 23
16 17 20 19 18
6 7 10 8 9
1 2 5 4 3
09:00 2
09:01 5
09:02 5
09:03 5
09:04 5
09:05 3
09:06 2
09:07 3
0 0 0

Sample Output

2 3
3 1
1 1
4 1
5 1
2 5
2 1
-1

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn=40;
const int maxq=60;

int graph[maxn][maxn];
bool flag[maxn][maxn];
int n,m,k;

struct quest
{
	int time,num,q;
	int x,y;
} P[maxq];

bool cmp1(quest A,quest B)
{
	return A.time<B.time;
}
bool cmp2(quest A,quest B)
{
	return A.num<B.num;
}

void solve(quest &kk)
{
	int ax,ay,sx,sy,cnt;
	ax=ay=sx=sy=-1;
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			if(flag[i][j]) continue;
			cnt=0;
			if((ax==-1&&ay==-1)||(graph[i][j]>graph[ax][ay])){
				ax=i; ay=j;
			}
			for(int k=j;k<m;k++){
				if(flag[i][k]) break;
				else cnt++;
			}
			if(cnt>=kk.q){
				if((sx==-1&&sy==-1)||(graph[i][j]>graph[sx][sy])){
					sx=i; sy=j;
				}
			}
		}
	}
	if(sx==-1&&sy==-1){
		kk.x=ax;
		kk.y=ay;
		if(kk.x!=-1) flag[kk.x][kk.y]=1;
	}
	else{
		kk.x=sx;
		kk.y=sy;
		for(int i=0;i<kk.q;i++) flag[kk.x][kk.y+i]=1;
	}
}

int main()
{
	char cc[20];
	int tt,num1,num2,ll;
	while(scanf("%d%d%d",&n,&m,&k),n!=0||m!=0||k!=0){
		for(int i=0;i<n;i++) for(int j=0;j<m;j++) scanf("%d",&graph[i][j]);
		memset(flag,0,sizeof(flag));
		for(int i=0;i<k;i++){
			scanf("%s %d",cc,&tt);
			P[i].num=i;
			P[i].q=tt;
			ll=strlen(cc);
			if(cc[2]==‘:‘){
                num1=((cc[0]-‘0‘)*10+(cc[1]-‘0‘))*60;
                if(ll-3>=2) num2=(cc[3]-‘0‘)*10+(cc[4]-‘0‘);
                else num2=cc[3]-‘0‘;
			}
			else{
                num1=(cc[0]-‘0‘)*60;
                if(ll-2>=2) num2=(cc[2]-‘0‘)*10+(cc[3]-‘0‘);
                else num2=cc[2]-‘0‘;
			}
			P[i].time=num1+num2;
		}
		sort(P,P+k,cmp1);
		for(int i=0;i<k;i++) solve(P[i]);
		sort(P,P+k,cmp2);
		for(int i=0;i<k;i++){
			if(P[i].x==-1) printf("-1\n");
			else printf("%d %d\n",P[i].x+1,P[i].y+1);
		}
	}
	return 0;
}

  

时间: 2024-08-26 22:51:06

hdu 3262 09 宁波 现场 C - Seat taking up is tough 暴力的相关文章

hdu 3268 09 宁波 现场 I - Columbus’s bargain

Description On the evening of 3 August 1492, Christopher Columbus departed from Palos de la Frontera with a few ships, starting a serious of voyages of finding a new route to India. As you know, just in those voyages, Columbus discovered the America

hdu 3264 09 宁波 现场 E - Open-air shopping malls 计算几何 二分

Description The city of M is a famous shopping city and its open-air shopping malls are extremely attractive. During the tourist seasons, thousands of people crowded into these shopping malls and enjoy the vary-different shopping. Unfortunately, the

hdu 4771 13 杭州 现场 B - Stealing Harry Potter&#39;s Precious 暴力bfs

Description Harry Potter has some precious. For example, his invisible robe, his wand and his owl. When Hogwarts school is in holiday, Harry Potter has to go back to uncle Vernon's home. But he can't bring his precious with him. As you know, uncle Ve

hdu 3695 10 福州 现场 F - Computer Virus on Planet Pandora 暴力 ac自动机

F - Computer Virus on Planet Pandora Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3695 Appoint description:  System Crawler  (2014-11-05) Description Aliens on planet Pandora also write comp

HDU 4815 2013长春现场赛C题

C - Little Tiger vs. Deep Monkey Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 4815 Description A crowd of little animals is visiting a mysterious laboratory ? The Deep Lab of SYSU. "Are y

HDU 3262 Seat taking up is tough

这题其实挺简单,可是自己就是被坑了很长时间,究其原因,脑袋短路了.本来排完序之后,应该把结果按照未排序之前的顺序输出,结果我就直接输出了,而题目给的例子正好是按顺序给的,输出没有问题,哎,果然够坑.以后再也不能相信题目给的例子了. #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<stack> #include<queue&g

hdu 5078 2014鞍山现场赛 水题

http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,因为说了ti<ti+1 //#pragma comment(linker, "/STACK:102400000,102400000") #include <cstdio> #include <cstring> #include <algorithm> #include <string> #include &l

hdu 3687 10 杭州 现场 H - National Day Parade 暴力水题

H - National Day Parade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3687 Appoint description:  System Crawler  (2014-11-08) Description There are n×n students preparing for the National Day

hdu 3682 10 杭州 现场 C - To Be an Dream Architect 简单容斥

C - To Be an Dream Architect Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status Practice HDU 3682 Appoint description:  System Crawler  (2014-11-09) Description The “dream architect” is the key role in a team o