题目链接:

http://poj.org/problem?id=3829

题意描述:

输入矩阵的大小n和m,以及来占位置的人数k

输入n*m的教室座位矩阵,每个值表示该座位的满意度

输入每个人来占位置的时间和需要几个位置h,m,q

计算并输出每个来占位置的人根据占位规则得到的坐标zx,zy,若一个位置都没有了,输出-1。

规则:

首先看有没有在同一行上的连续的k个座位,有则这个占位的同学坐在这连续k个座位的最左边,如果有多行上都存在连续的k个位置,则该占位的同学会选择最左边值最大的位置(坑点就在这,不是k个位置

的和最大),如果不存在在同一行上的连续的k个位置,则只需在现有的空位上挑一个满意度最大的给自己坐就行了,如果一个位置都没有了,就输出-1。

另外题目需要按照提问的顺序给出答案,也就是说给的时间可能使乱序的,但是最后输出结果的时候要按照提问顺序输出答案。

AC代码:

 #include<stdio.h>
#include<algorithm>
using namespace std;
int inf=;
int a[][];
struct T
{
int z,h,m,q,zx,zy,f; //z表示提问顺序,最后按该值排序
}; //f表示该占位同学能否找到一个位置
struct T t[];
int cmp(struct T a,struct T b)
{ //先按照小时排,再按分钟排
if(a.h<b.h)
return ;
else if(a.h==b.h)
{
if(a.m<b.m)
return ;
else
return ;
}
return ;
}
int cmp1(struct T a,struct T b)
{
return a.z<b.z;
}
int main()
{
int i,j,k,l,m,n,b[],qq;
long long max;
while(scanf("%d%d%d",&n,&m,&qq), n+m+qq != )
{
for(i=;i<=n;i++)
for(j=;j<=m;j++)
scanf("%d",&a[i][j]);
for(j=;j<=n;j++) //表示该行还有几个座位
b[j]=m;
for(i=;i<=qq;i++)
{
t[i].f=;
t[i].z=i;
scanf("%d:%d%d",&t[i].h,&t[i].m,&t[i].q);
}
sort(t+,t+qq+,cmp);
/*for(i=1;i<=qq;i++)
printf("%d %d %d\n",t[i].h,t[i].m,t[i].q);*/
for(l=;l<=qq;l++)
{
max=-inf;
int x;int y;
long long sum;
int s=;
for(i=;i<=n;i++)
if(b[i]==) s++;
if(s==n)
{
t[l].f=;
continue;
}
for(i=;i<=n;i++)
{
sum=;
if(b[i]>=t[l].q)
{
for(j=;j<=m-t[l].q+;j++)
{
sum=a[i][j];
for(k=j;k<j+t[l].q;k++)
if(a[i][k]==-inf) break;
if(k==j+t[l].q&&max<sum)
{
max=sum;
x=i;y=j;
}
}
}
}
if(max==-inf)
{
int mx1=-inf;
for(i=;i<=n;i++)
{
for(j=;j<=m;j++)
{
if(mx1<a[i][j])
{
mx1=a[i][j];
x=i;y=j;
}
}
}
b[x]--;
a[x][y]=-inf;
}
else
{
b[x]-=t[l].q;
for(j=y;j<y+t[l].q;j++)
a[x][j]=-inf;
}
t[l].f=;
t[l].zx=x;
t[l].zy=y;
}
sort(t+,t+qq+,cmp1);
for(i=;i<=qq;i++)
{
if(t[i].f)
printf("%d %d\n",t[i].zx,t[i].zy);
else
printf("-1\n");
}
}
return ;
}

POJ 3829 Seat taking up is tough(——只是题目很长的模拟)的更多相关文章

  1. 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 ...

  2. hdu 3262 09 宁波 现场 C - Seat taking up is tough 暴力 难度:0

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

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

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

  4. POJ 1743 Musical Theme (后缀数组,求最长不重叠重复子串)(转)

    永恒的大牛,kuangbin,膜拜一下,Orz 链接:http://www.cnblogs.com/kuangbin/archive/2013/04/23/3039313.html Musical T ...

  5. POJ 3261 Milk Patterns 可重复k次的最长重复子串

    Milk PatternsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=3261 Description ...

  6. poj 1743 男人八题之后缀数组求最长不可重叠最长重复子串

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 14874   Accepted: 5118 De ...

  7. POJ 3654 &amp; ZOJ 2936 &amp; HDU 2723 Electronic Document Security(模拟)

    题目链接: PKU:http://poj.org/problem?id=3654 ZJU:http://acm.zju.edu.cn/onlinejudge/showProblem.do?proble ...

  8. POJ 2253 ——Frogger——————【最短路、Dijkstra、最长边最小化】

    Frogger Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Stat ...

  9. Poj 1743——Musical Theme——————【后缀数组,求最长不重叠重复子串长度】

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22499   Accepted: 7679 De ...

随机推荐

  1. 20行JS代码实现贪吃蛇

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. C语言学生管理系统(原版本)(自编)

    /*系统特色:(大牛勿笑) *颜色提示 *文字提示 *功能 */ #include <stdio.h> #include <stdlib.h> #include <mat ...

  3. S2 深入.NET和C#编程 三:使用集合组织相关数据

    三:使用集合组织相关数据 集合概念: ArrayList:非常类似于数组,也有人称他为数组的列表.ArrayList可以动态维护,数组的容量是固定的 和数组类似,ArrayList中存储的是数据成为元 ...

  4. vue2.0 资源文件assets和static的区别

    资源文件处理 在我们的项目结构里,有两个资源文件的路径,分别是:src/assets 和 static/.那这两个到底有什么区别呢? Webpacked 资源 为了回答这个问题,我们首先需要理解web ...

  5. 浅谈MVC MVP MVVM

    复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用. 它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...

  6. oracle之 RA-00054: resource busy and acquire with NOWAIT specified or timeout expired

    1. truncate 表报 ORA-00054 ,标明有事务正在操作该表SQL> truncate table alldm.DM_XQKD_YUJING_D;truncate table al ...

  7. Linux下SVN提交时强制写日志

    Linux版本: 1.在svn的hooks目录下新建一个名为pre-commit的文件并为其添加执行权限(用vi pre-commit直接创建) 2.pre-commit文件的内容如下: #!/bin ...

  8. npm package.json文件解读

    每个Nodejs项目的根目录下面,一般都会有一个package.json文件.该文件可以由npm init生成,定义了项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据). pa ...

  9. 基于PDO的简易ORM

    #基于PRO的一个简单地ORM GitHub 项目地址 #在用原生写脚本的时候怀念起框架中封装好的ORM,所以仿照laravel写了这个简洁版的ORM,可以链式操作. #实现功能 ###条件函数 ta ...

  10. 迭代器中next()的用法

    >>> g = (x ** 2 for x in range(10)) >>> next(g) 0 >>> next(g) 1 >>& ...