• Codeforces 720A. Closing ceremony


    A. Closing ceremony
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes

    The closing ceremony of Squanch Code Cup is held in the big hall with n × m seats, arranged in n rows, m seats in a row. Each seat has two coordinates (x, y) (1 ≤ x ≤ n1 ≤ y ≤ m).

    There are two queues of people waiting to enter the hall: k people are standing at (0, 0) and n·m - k people are standing at (0, m + 1). Each person should have a ticket for a specific seat. If person p at (x, y) has ticket for seat (xp, yp) then he should walk |x - xp| + |y - yp|to get to his seat.

    Each person has a stamina — the maximum distance, that the person agrees to walk. You should find out if this is possible to distribute all n·m tickets in such a way that each person has enough stamina to get to their seat.

    Input

    The first line of input contains two integers n and m (1 ≤ n·m ≤ 104) — the size of the hall.

    The second line contains several integers. The first integer k (0 ≤ k ≤ n·m) — the number of people at (0, 0). The following k integers indicate stamina of each person there.

    The third line also contains several integers. The first integer l (l = n·m - k) — the number of people at (0, m + 1). The following lintegers indicate stamina of each person there.

    The stamina of the person is a positive integer less that or equal to n + m.

    Output

    If it is possible to distribute tickets between people in the described manner print "YES", otherwise print "NO".

    Examples
    input
    2 2
    3 3 3 2
    1 3
    output
    YES
    input
    2 2
    3 2 3 3
    1 2
    output
    NO

    题目大意:n*m个座位, 有n*m个人,一开始有k个人在(0,0)点上,l个人在(0,m+1)点上,每个人有对应的体力值,体力值即为可以行走的距离(曼哈顿距离),问是否存在一种方案是每个人花费的体力不超过上限,且每个人都有位置坐。


    贪心:对于前k个人,我们按照体力排序,显然找到一个以距离(0,m+1)尽可能远为第一关键字,与(0,0)尽可能远为第二关键字的位置,那么这个人就应该在这个位置。之后l个人放到与(0,m+1)尽可能远的且没有人的位置,检测是否存在这种可能。


    AC code
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cstdlib>
     5 #include<algorithm>
     6 #include<vector>
     7 #include<cmath>
     8 #include<ctime>
     9 #include<cstring>
    10 #define yyj(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout);
    11 #define llg long long
    12 #define maxn 10010
    13 using namespace std;
    14 llg i,j,k,n,m,k1,k2,t1,t2,bj[maxn],x,y,l,len,a[maxn],b[maxn],maxl;
    15 bool f;
    16 int main()
    17 {
    18     yyj("1");
    19     cin>>n>>m>>k1;
    20     for (i=1;i<=k1;i++) cin>>a[i];
    21     sort(a+1,a+k1+1);
    22     cin>>k2;
    23     for (j=1;j<=k2;j++) cin>>b[j];
    24     sort(b+1,b+k2+1);
    25     int c[n+10][m+10];
    26     for (i=0;i<=n;i++) for (j=0;j<=m;j++) c[i][j]=0;
    27     for (k=1;k<=k1;k++)
    28     {
    29         f=false; maxl=0;
    30         for (i=1;i<=n;i++)
    31             for (j=1;j<=m;j++)
    32                 if (i+j<=a[k] && i+m+1-j>maxl && c[i][j]==0)
    33                 {
    34                     f=true;
    35                     x=i,y=j;
    36                     maxl=i+m-j+1;
    37                 }
    38         if (f)
    39         {
    40             c[x][y]=1;
    41         }
    42         else
    43         {
    44             cout<<"NO";
    45             return 0;
    46         }
    47     }
    48     for (k=1;k<=k2;k++)
    49     {
    50         maxl=0,f=false;
    51         for (i=1;i<=n;i++)
    52             for (j=1;j<=m;j++)
    53                 if (c[i][j]==0 && i+m+1-j>maxl && i+m+1-j<=b[k])
    54                 {
    55                     f=true;
    56                     x=i; y=j;
    57                     maxl=i+m+1-j;
    58                 }
    59         if (f)
    60         {
    61             c[x][y]=1;
    62         }
    63         else
    64         {
    65             cout<<"NO";
    66             return 0;
    67         }
    68     }
    69     cout<<"YES";
    70     return 0;
    71 }
    本文作者:xrdog 作者博客:http://www.cnblogs.com/Dragon-Light/ 转载请注明出处,侵权必究,保留最终解释权!
  • 相关阅读:
    oarcle 提取数字函数
    通用XML操作类(微型本地xml数据库)
    linux内核模块Makefile的解析
    开源的许可证GPL、LGPL、BSD、Apache 2.0的通俗解释
    弹性布局
    CSS基础知识
    HTML5基本标签
    VS2008开发Windows Mobile6环境搭建及模拟器联网问题图解
    .Silverlight Binding (One Time,One Way,Two Way)
    WCF Service中HttpContext.Current为null的解决办法
  • 原文地址:https://www.cnblogs.com/Dragon-Light/p/5883228.html
Copyright © 2020-2023  润新知