POJ 3829 Seat taking up is tough(——只是题目很长的模拟)

Posted Reqaw’s Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3829 Seat taking up is tough(——只是题目很长的模拟)相关的知识,希望对你有一定的参考价值。

题目链接:

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

题意描述:

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

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

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

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

规则:

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

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

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

AC代码:

  1 #include<stdio.h>
  2 #include<algorithm>
  3 using namespace std;
  4 int inf=99999999; 
  5 int a[40][40];
  6 struct T
  7 {
  8     int z,h,m,q,zx,zy,f;    //z表示提问顺序,最后按该值排序 
  9 };                    //f表示该占位同学能否找到一个位置 
 10 struct T t[60];
 11 int cmp(struct T a,struct T b)
 12 {    //先按照小时排,再按分钟排 
 13     if(a.h<b.h)
 14     return 1;
 15     else if(a.h==b.h)
 16     {
 17         if(a.m<b.m)
 18         return 1;
 19         else
 20         return 0;
 21     }
 22     return 0;
 23 }
 24 int cmp1(struct T a,struct T b)
 25 {
 26     return a.z<b.z;
 27 }
 28 int main()
 29 {
 30     int i,j,k,l,m,n,b[60],qq;
 31     long long max;
 32     while(scanf("%d%d%d",&n,&m,&qq), n+m+qq != 0)
 33     {
 34         for(i=1;i<=n;i++)
 35             for(j=1;j<=m;j++)
 36                 scanf("%d",&a[i][j]);
 37         for(j=1;j<=n;j++)                //表示该行还有几个座位 
 38             b[j]=m;
 39         for(i=1;i<=qq;i++)
 40         {
 41             t[i].f=0;
 42             t[i].z=i;
 43             scanf("%d:%d%d",&t[i].h,&t[i].m,&t[i].q);
 44         }
 45         sort(t+1,t+qq+1,cmp);
 46         /*for(i=1;i<=qq;i++)
 47             printf("%d %d %d\n",t[i].h,t[i].m,t[i].q);*/
 48         for(l=1;l<=qq;l++)
 49         {
 50             max=-inf;
 51             int x;int y;
 52             long long sum;
 53             int s=0;
 54             for(i=1;i<=n;i++)
 55                 if(b[i]==0) s++;
 56             if(s==n)
 57             {
 58                 t[l].f=0;
 59                 continue;
 60             }                
 61             for(i=1;i<=n;i++)
 62             {
 63                 sum=0;
 64                 if(b[i]>=t[l].q)
 65                 {
 66                     for(j=1;j<=m-t[l].q+1;j++)
 67                     {
 68                         sum=a[i][j];
 69                         for(k=j;k<j+t[l].q;k++)
 70                             if(a[i][k]==-inf) break;
 71                         if(k==j+t[l].q&&max<sum)
 72                         {    
 73                             max=sum;
 74                             x=i;y=j;
 75                         }
 76                     }
 77                 }
 78             }
 79             if(max==-inf)
 80             {
 81                 int mx1=-inf;
 82                 for(i=1;i<=n;i++)
 83                 {
 84                     for(j=1;j<=m;j++)
 85                     {
 86                         if(mx1<a[i][j])
 87                         {
 88                             mx1=a[i][j];
 89                             x=i;y=j;
 90                         }
 91                     }
 92                 }
 93                 b[x]--;
 94                 a[x][y]=-inf;
 95             }
 96             else
 97             {
 98                 b[x]-=t[l].q;
 99                 for(j=y;j<y+t[l].q;j++)
100                     a[x][j]=-inf;
101             }
102             t[l].f=1;
103             t[l].zx=x;
104             t[l].zy=y;
105         }
106         sort(t+1,t+qq+1,cmp1);
107         for(i=1;i<=qq;i++)
108         {
109             if(t[i].f)
110             printf("%d %d\n",t[i].zx,t[i].zy);
111             else
112             printf("-1\n");
113         }
114     }
115     return 0;
116 }

 

以上是关于POJ 3829 Seat taking up is tough(——只是题目很长的模拟)的主要内容,如果未能解决你的问题,请参考以下文章

The 2018 ACM-ICPC Chinese Collegiate Programming Contest Take Your Seat

2018-2019 ACM-ICPC, China Multi-Provincial Collegiate D. Take Your Seat(数学概率)

[2016-03-11][POJ][1609][Tiling Up Blocks]

nsurlsessiond - taking up all bandwidth!! Help ?

seek for|contrary to|lag behind|take up|take advantage of|be confident of|allow for |

[bzoj3829][Poi2014]FarmCraft_树形dp