首页 > 其他 > 详细

洛谷 1056 排座椅

时间:2019-10-21 15:43:42      阅读:80      评论:0      收藏:0      [点我收藏+]

这是一题模拟加桶排。

先分支判断是行相邻还是列相邻,再用2个数组分别存储行和列的过道可以隔开多少对,找出可以隔开的最多的过道,并输出。

 

#include<bits/stdc++.h>
using namespace std;
int m,n,k,l,d;
int x[1005],y[1005];
int c[1005],o[1005];
int main()
{
    scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
    for(int i=1;i<=d;i++)
    {
        int xi,yi,p,q;
        scanf("%d%d%d%d",&xi,&yi,&p,&q);
        if(xi==p) x[min(yi,q)]++;
        else     y[min(xi,p)]++;
    }
    for(int i=1;i<=k;i++)
    {
        int maxn=-1,p;
        for(int j=1;j<m;j++)
            if(y[j]>maxn)
            {
                maxn=y[j];
                p=j;
            }
        y[p]=0; c[p]++;
    }
    for(int i=1;i<=l;i++)
    {
        int maxn=-1,p;
        for(int j=1;j<n;j++)
            if(x[j]>maxn)
            {
                maxn=x[j];
                p=j;
            }
        x[p]=0; o[p]++;
    }
    for(int i=0;i<1005;i++)
        if(c[i])
            printf("%d ",i);
    printf("\n");
    for(int i=0;i<1005;i++)
        if(o[i])
            printf("%d ",i);
    return 0;
}

 

洛谷 1056 排座椅

原文:https://www.cnblogs.com/Siv0106/p/11713406.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!