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
 
题意:占座,每个同学有两种占座方案 1 占在同一行,自己坐在最西边 2 只占自己的 
优先给同学占座,分别在这两种情况下使自己舒适值最高
这是io07熊的代码
 
 
#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;
}

  

hdu 3262 09 宁波 现场 C - Seat taking up is tough 暴力 难度:0的更多相关文章

  1. hdu 3264 09 宁波 现场 E - Open-air shopping malls 计算几何 二分 圆相交面积 难度:1

    Description The city of M is a famous shopping city and its open-air shopping malls are extremely at ...

  2. hdu 3268 09 宁波 现场 I - Columbus’s bargain 读题 最短路 难度:1

    Description On the evening of 3 August 1492, Christopher Columbus departed from Palos de la Frontera ...

  3. hdu 3695 10 福州 现场 F - Computer Virus on Planet Pandora 暴力 ac自动机 难度:1

    F - Computer Virus on Planet Pandora Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format ...

  4. hdu 3689 杭州 10 现场 J - Infinite monkey theorem 概率dp kmp 难度:1

    J - Infinite monkey theorem Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &am ...

  5. hdu 3699 10 福州 现场 J - A hard Aoshu Problem 暴力 难度:0

    Description Math Olympiad is called “Aoshu” in China. Aoshu is very popular in elementary schools. N ...

  6. hdu 4771 13 杭州 现场 B - Stealing Harry Potter's Precious 暴力bfs 难度:0

    Description Harry Potter has some precious. For example, his invisible robe, his wand and his owl. W ...

  7. HDU 3262 Seat taking up is tough (模拟搜索)

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=3262 题意:教室有n*m个座位,每个座位有一个舒适值,有K个学生在不同时间段进来,要占t个座位,必须是连 ...

  8. HDU 3262/POJ 3829 Seat taking up is tough(模拟+搜索)(2009 Asia Ningbo Regional)

    Description Students often have problems taking up seats. When two students want the same seat, a qu ...

  9. hdu 5078 2014鞍山现场赛 水题

    http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...

随机推荐

  1. Nginx文件下载服务器

    1. 配置文件 server { listen 80; #端口 server_name localhost; #服务名 charset utf-8; #避免中文乱码 root /data/packag ...

  2. Django之views.py详解

    http请求中产生的两个核心对象: http请求:HttpRequesthttp响应:HttpResponse 所在位置:from django.http import HttpRequest,Htt ...

  3. 由SOAP说开去 - - 谈谈WebServices、RMI、RPC、SOA、REST、XML、JSON

    引子: 关于SOAP其实我一直模模糊糊不太理解,这种模模糊糊的感觉表述起来是这样: 在使用web服务时(功能接口),本来我就可以通过安卓中固有的http类(使用http协议),来发送http请求,并且 ...

  4. Ubuntu18.04下安装比特币客户端

    一.下载有两种安装方式:安装包和源码 二.安装1.通过安装包安装在https://bitcoin.org/en/download下载Windows,Mac OSX,Linux对应的安装包.安装过程比较 ...

  5. (1.2)DML增强功能-4大排名函数与top ties/tablesample

    关键字:sql server窗口函数.分析函数.四大窗口函数 1.row_number()  over( partition by column order by column) (1)测试数据 (2 ...

  6. 【剑指Offer】俯视50题之1-10题

    面试题1赋值运算符函数  面试题2 实现Singleton模式  面试题3 二维数组中的查找   面试题4 替换空格   面试题5 从头到尾打印链表   面试题6 重建二叉树   面试题7 用两个栈实 ...

  7. 【代码片段】Python发送带图片的邮件

    # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...

  8. 【开发者笔记】利用ab命令对接口进行压力测试

    目标:对接口进行正确性测试和压力测试 工具:Apache-ab 下载 系统:Windows.linux 目标接口:http://www.stagebo.xyz/foru/lifemonths 命令:a ...

  9. SVN Checkout 不包括源文件夹根目录

    SVN Checkout 不包括源文件夹根目录,比如我要checkout   trunk/ 下面的所有文件,但是不包括trunk 文件夹 我们可以在svn文件夹后面打个空格,在加个“.”就行了 eg: ...

  10. Java基础知识 Set

    在Java中使用Set,可以方便地将需要的类型以集合类型保存在一个变量中.主要应用在显示列表.Set是一个不包含重复元素的 collection. 更确切地讲,set 不包含满足 e1.equals( ...