P1056排坐椅

这是2008普及组真题,是一个提高—的模拟。

仔细读完题便有了思路:累放在i行能隔开wi个,比较排序wi,输出即可。所以在这里遇到了结构体排序的问题与手写cmp的问题。对于两个语法知识掌握得都不好,所以造成了死循环或者......(迄今仍然不知道错在了哪里),所以wa1,wa2,wa3..蓝瘦,希望洛谷的大佬可以帮帮我。

1.熟练掌握struct &sort语法

2.尽量不开二维数组

3.要把问题转化到最简单的求解形式(比如x1==x2而非mp[x1+1]=mp[x1])

代码:

#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
    int num,sum;
}hang[1005],lie[1005];
bool cmp(node x,node y)
{
    return x.sum>y.sum;
}

bool cmp1(node x,node y)
{
    return x.num<y.num;
}
int m,n;
int d,k,l,x1,x2,y1,y2;
int main()
{
    cin>>m>>n>>k>>l>>d;
    for(int i=1;i<=d;i++)
    {
        cin>>x1>>y1>>x2>>y2;
        if(x1==x2) 
        {
        lie[min(y1,y2)].num=min(y1,y2);
        lie[min(y1,y2)].sum++;
        }
        else 
        {
        hang[min(x1,x2)].num=min(x1,x2);
        hang[min(x1,x2)].sum++;
        }
    }
    sort(lie+1,lie+n+1,cmp);
    sort(hang+1,hang+m+1,cmp);
    sort(lie+1,lie+l+1,cmp1);
    sort(hang+1,hang+k+1,cmp1);
    for(int i=1;i<=k;i++) cout<<hang[i].num<<" ";
    cout<<endl;
    for(int i=1;i<=l;i++) cout<<lie[i].num<<" ";
    return 0;
}

 

posted @ 2019-07-21 20:54  毛炯人  阅读(117)  评论(0编辑  收藏  举报