zoukankan      html  css  js  c++  java
  • 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
    ",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
    ",t[i].zx,t[i].zy);
    111             else
    112             printf("-1
    ");
    113         }
    114     }
    115     return 0;
    116 }
  • 相关阅读:
    js中的replace 回车符
    HttpHandler 读取Session
    [原]vs2005 修改新增文件时的默认编码方式
    系统托盘NotifyIcon控件及右键菜单功能
    addAttribute
    gpibCmd
    deviceFactory
    string is
    TitledMotorEntry TitledFrame MotorViewEntry TitleMotorEntry
    IOC port
  • 原文地址:https://www.cnblogs.com/wenzhixin/p/7622804.html
Copyright © 2011-2022 走看看