排座椅

排座椅

https://ac.nowcoder.com/acm/problem/16618

题意

班里有m行n列个座位,一共有d对同学紧挨着(前后或者左右)喜欢讲话,小雪可以在教室中设置了K条横向的通道,L条纵向的通道,通道可以分开挨着的同学,问通道设置在什么位置可以使班上讲话的人数最少。

题解

简单的贪心。每条通道肯定是能分开的同学越多越好,所以枚举喜欢讲话的同学,将他们之间的路记录下来,行和列用不同的数组记录,然后行和列都由大到小排序路的个数。排序后,将行中前K个路按照路的编号由小到大排序后输出这K条路,列中前L个路也同样操作。

代码

#include<bits/stdc++.h>
using namespace std;

struct node
{
    int res,id;
}a[100100],b[100100];

int cmp(node x,node y)
{
    return x.res>y.res;
}

int cmp2(node x,node y)
{
    return x.id<y.id;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n,m,k,l,d;
    cin>>n>>m>>k>>l>>d;
    int k1=0,k2=0;
    for(int i=0;i<d;i++){
        int x1,x2,y1,y2;
        cin>>x1>>y1>>x2>>y2;
        if(x1==x2){
            int y=min(y1,y2);
            b[y].id=y;
            b[y].res++;
        }
        else {
            int x=min(x1,x2);
            a[x].id=x;
            a[x].res++;
        }
    }
    sort(a+1,a+1+m,cmp);
    sort(b+1,b+1+n,cmp);
    sort(a+1,a+1+k,cmp2);
    sort(b+1,b+1+l,cmp2);
    for(int i=1;i<=k;i++) {
        if(!a[i].id) break;
        cout<<a[i].id<<' ';
    }
    cout<<endl;
    for(int i=1;i<=l;i++) {
        if(!b[i].id) break;
        cout<<b[i].id<<' ';
    }
    cout<<endl;
    return 0;
}

全部评论

相关推荐

05-12 10:10
已编辑
门头沟学院 人工智能
写这篇之前我犹豫了挺久。一方面是怕被人骂,&quot;又一个收割焦虑的转行帖&quot;;另一方面是看了太多用&nbsp;GPT&nbsp;套娃出来的「学习路线」文章,AI&nbsp;味重得让人没法读完。所以这篇全是亲身踩过的坑,时间线、用过的项目、当时的心路全都尽量原样写出来。如果你是大学生在迷茫要不要转&nbsp;AI,或者已经在转的路上,希望能给点参考。&nbsp;一个反共识的开场:你以为进&nbsp;OpenAI&nbsp;的人都是博士?&nbsp;先讲个故事,跟我没关系,但跟所有想转&nbsp;AI&nbsp;的人都有关系。&nbsp;OpenAI&nbsp;的&nbsp;Sora&nbsp;团队(就是搞文生视频那个)一共&nbsp;13&nbsp;个人。这里面有两个人特别有意思:&nbsp;Will&nbsp;DePue,密歇根大学计算机系,直接辍学了。17...
_hengheng:我也本,也算是做ai相关,我最开始感觉做ai工程师有多么多么困难,后来发现懂了原理后整体训练完全可以看成一个流程化的内容,开源方案太多了,大多基本都是按着模子在自家业务上做各种操作,就算是大厂的小部门也没那么多资源去训基模,反而更多的是像怎么把技术往业务方向靠近了,不过当前时代如果本科学历没那么好加上自己执行力不是特别强还真不建议走ai工程师这条路,可以试试其他ai的偏业务方向,不然校招不太好杀出来
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务