人間夜行

一切の有為の法 夢幻泡影の如し

RQNOJ 486 排座椅

| 评论

//统计每一排的对数,即拆散后可得对数。然后从大的开始取。(贪心一道)
//注意输出排数时要从小到大。
//同时注意输出时的格式。换行、空格之类的。
#include <stdio.h>
int map[2001][5];
int hang[1001]={0};
int lie[1001]={0};
int m,n,k,l,d;
int cmp(const void *a,const void *b)
{
        return *(int *)a-*(int *)b;
}
int maxhpos()
{
        int i;
        int max=0;
        int maxpos=0;
        for(i=1;i<=m;i++)
                if(hang[i]>max)
                {
                        max=hang[i];
                        maxpos=i;
                }
        hang[maxpos]=0;
        return maxpos;
}
int maxlpos()
{
        int i;
        int max=0;
        int maxpos=0;
        for(i=1;i<=n;i++)
                if(lie[i]>max)
                {
                        max=lie[i];
                        maxpos=i;
                }
        lie[maxpos]=0;
        return maxpos;
}
int min(int a,int b)
{
        if(a<b) return a;
        else return b;
}
int main()
{
        scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
        int i,r;
        int chu1[1001],chu2[1001];
        for(i=1;i<=d;i++)
        {
                scanf("%d%d%d%d",&map[i][1],&map[i][2],&map[i][3],&map[i][4]);
                if(map[i][1]==map[i][3]) lie[min(map[i][2],map[i][4])]++;
                if(map[i][2]==map[i][4]) hang[min(map[i][1],map[i][3])]++;
        }
        for(i=1;i<=k;i++)
        {
                chu1[i]=maxhpos();
        }
        for(i=1;i<=l;i++)
        {
                chu2[i]=maxlpos();
        }
        qsort(&chu1[1],k,sizeof(chu1[1]),cmp);
        qsort(&chu2[1],l,sizeof(chu2[1]),cmp);
        for(i=1;i<k;i++) printf("%d ",chu1[i]);printf("%d",chu1[i]);
        printf("\n");
        for(i=1;i<l;i++) printf("%d ",chu2[i]);printf("%d",chu2[i]);
        return 0;
}

评论