UVALive 7512November 11th

来源:互联网 发布:东德知乎 编辑:程序博客网 时间:2024/06/05 15:51

题意:

给出一个矩阵,已知若干点是坏的,  安排座位,两两不能相邻。询问座位可以容纳最多或者最少的人。

思路:

最多的话就从边上开始占 X.X   最少的话就.X.

#include <iostream>#include <stdio.h>#include <algorithm>#include <cstring>using namespace std;int mp[1005][1005];int main(){    int t;    scanf("%d",&t);    int n,m;    for(int cs=1; cs<=t; cs++)    {        scanf("%d%d",&n,&m);        memset(mp,0,sizeof mp);        int k;        scanf("%d",&k);        while(k--)        {            int x,y;            scanf("%d%d",&x,&y);            x++, y++;            mp[x][y]=1;        }        int num=0;        int maxx=0,minn=0;        for(int i=1;i<=n;i++)        {            num=0;            for(int j=1;j<=m;j++)            {                if(mp[i][j]==1)                {                    maxx+=num/3+(!(num%3==0));                    num=0;                }                else num++;            }            maxx+=num/3+(num%3!=0);        }        for(int i=1;i<=n;i++)        {            num=0;            for(int j=1;j<=m;j++)            {                if(mp[i][j]==1)                {                    minn+=num/2+(num%2!=0);                    num = 0;                }                else num++;            }            minn+=num/2+(num%2!=0);        }        printf("Case #%d: ",cs);        printf("%d %d\n",minn,maxx);    }    return 0;}


原创粉丝点击