• Luogu1056排座椅


    这是一道水题
    本来以为和图论有关,但仔细读题发现排序+贪心就可以过掉;
    话不多说上代码。

    #include<bits/stdc++.h>
    using namespace std;
    int m,n,k,l,d;
    struct node//结构体
    {
    int order;
    int student;
    }x[1010],y[1010];
    inline int qread()//快读,我只是码着练一练;
    {
    int res = 0; bool bo = 0; char c;
    while (((c = getchar()) < '0' || c > '9') && c != '-');
    if (c == '-') bo = 1; else res = c - 48;
    while ((c = getchar()) >= '0' && c <= '9')
    res = (res << 3) + (res << 1) + (c - 48);
    return bo ? ~res + 1 : res;
    }
    bool cmp(node a,node b)//先按照说话人数排序
    {
    return a.student ==b.student ? a.order <b.order : a.student >b.student ;
    }
    bool cmp1(node a,node b)//输出需要,要把行列按顺序输出,还要排一遍
    {
    return a.order <b.order ;
    }
    void read()
    {
    int x_1,y_1,p_1,q_1;
    
    m=qread();
    n=qread();
    k=qread();
    l=qread();
    d=qread();
    for(int i=1;i<=d;i++)
    {
    x_1=qread();
    y_1=qread();
    p_1=qread();
    q_1=qread();
    for(int i=1;i<=m;i++) x[i].order =i;
    for(int i=1;i<=n;i++) y[i].order =i;
    if(x_1==p_1) //两个人在同一行,记下列
    {
    y[min(y_1,q_1)].student ++;//要判断一下大小,记小的列
    }
    if(y_1==q_1)
    {
    x[min(x_1,p_1)].student ++;//两人同行,和列一样
    }
    }
    }
    int main()
    {
    //    freopen("testdata.in","r",stdin);
    read();
    sort(y+1,y+n+1,cmp);//先按人数排列
    sort(x+1,x+1+m,cmp);
    sort(x+1,x+k+1,cmp1);//后按行列顺序排不然会WA,亲身体会;
    sort(y+1,y+l+1,cmp1);
    for(int i=1;i<=k;i++)
    {
    printf("%d ",x[i].order );
    }
    printf("
    ");
    for(int i=1;i<=l;i++)
    {
    printf("%d ",y[i].order );
    }
    return 0;
    }

    本蒟蒻第二次发题解希望会过吧!ありがとうございます

  • 相关阅读:
    并发编程---守护进程
    并发编程---Process对象的其他属性或方法
    并发编程---开启进程方式---查看进程pid
    并发编程---操作系统
    ie浏览器的css bug
    链接内的图片与文字如何对齐?
    inline元素特性
    最大流EK算法模板
    数据结构 链式表
    运算表达式 栈应用
  • 原文地址:https://www.cnblogs.com/Shiina-Rikka/p/11223639.html
Copyright © 2020-2023  润新知