排座椅

排座椅

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

题目链接:https://ac.nowcoder.com/acm/problem/16618
题意:
上课的时候总有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情。不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的D对同学上课时会交头接耳。同学们在教室中坐成了M行N列,坐在第i行第j列的同学的位置是(i,j),为了方便同学们进出,在教室中设置了K条横向的通道,L条纵向的通道。于是,聪明的小雪想到了一个办法,或许可以减少上课时学生交头接耳的问题:她打算重新摆放桌椅,改变同学们桌椅间通道的位置,因为如果一条通道隔开了两个会交头接耳的同学,那么他们就不会交头接耳了。
请你帮忙给小雪编写一个程序,给出最好的通道划分方案。在该方案下,上课时交头接耳的学生对数最少。

其找到从大到小排列的行列数,记录位置,在按从小到大

#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#include<cstdio>

using namespace std;
typedef long long ll;
const int N = 100001;
struct node {//定义结构体变量
    int id, num;
};
bool cmp2(node a, node b) {                        //从大到小排列 num
    return a.num > b.num;
}
node a[N], b[N];                            // a 表示 列 , b 表示 行
int main() {
    int n, m, k, l, d;
    cin >> m >> n >> k >> l >> d;
    for (int i = 0; i < N; i++) {            //初始化
        a[i].id = i;
        a[i].num = 0;
        b[i].id = i;
        b[i].num = 0;
    }
    for (int i = 0; i < d; i++) {
        int x1, x2, y1, y2;
        cin >> x1 >> y1 >> x2 >> y2;
        if (x1 == x2) {
            y2 = min(y1, y2);                //相同行,用小的列表示出现次数
            a[y2].num++;
        }
        else {
            x2 = min(x1, x2);                //同理
            b[x2].num++;
        }
    }
    sort(a, a + N, cmp2);
    sort(b, b + N, cmp2);                //按 各自num,从大到小排列
    /*for (int i = 0; i < 4; i++) {
        cout << a[i].num << endl;
        cout << b[i].num << endl;
    }*/
    int aa[N], bb[N];                    //用数组存已知一定要的第几行,第几列,前面已经由a,b排好了
    for (int i = 0; i < l; i++) {
        aa[i] = a[i].id;
    }
    for (int i = 0; i < k; i++) {
        bb[i] = b[i].id;
    }
    sort(aa, aa + l);
    sort(bb, bb + k);                        //只是再按从小到大的顺序输出就行
    for (int i = 0; i < k; i++) {
        if (i == k - 1)cout << bb[i] << endl;
        else cout << bb[i] << " ";
    }
    for (int i = 0; i < l; i++) {
        if (i == l - 1)cout << aa[i] << endl;
        else cout << aa[i] << " ";
    }

}
全部评论

相关推荐

XingHaozhe:没啥大问题啊,Agent + 后端业务,勇敢投!
点赞 评论 收藏
分享
04-16 10:27
已编辑
美团_Saas_后端开发
今天周一休息,突发奇想写一篇阶段总结。如题,我已经去了一个和Java彻底毫无关联的行业。曾经我以为自己能在计算机行业发光发热,拿到美团offer那会感觉自己天都亮了。没想到刚入行一年多就当了逃兵。从最开始的热爱到现在一看到代码就厌恶,不知道自己经历了什么。所以我去干什么了?答案是:在成都当了租房销售。上班那会压力大了就念叨着去干租房中介,但是一直下不去这个决心,想着自己学了四年多的计算机知识,终究还是不甘心。终于在某一天准备八股文的时候,看着无数篇和工作内容关系不大的理论知识,那一刻下定决心,决定尝试一下销售行业,也算是给自己一个交代。后面阴差阳错的投了成都自如去当租房管家,没想到面试很顺利,在当天一百多个面试的人里面,我成为了为数不多通过的几个幸运儿之一。目前已经培训通过,正式入职,也开了单,有压力但是每天过得很开心,真心喜欢那种和人交流的感觉,哪怕是最后没有选择找我租房。说这些也是想告诉那些大三,大四正在找Java实习而焦虑的同学:你们现在还年轻,选择很多,容错率也很高,可以尽情去尝试自己喜欢的行业和工作。不用因为某一次的面试没通过或者简历石沉大海而焦虑,更不用因为身边人都在挤编程的独木桥就强迫自己跟风。也算是自己的碎碎念吧,也希望自己能在新的领域取得一点小成就。也祝牛油工作顺利!
沉淀小子:干啥都不丢人啊,生存是必须要的,销售很考验一个人综合素质能力的,好的销售人脉和资源可不比写字楼的白领差啊
点赞 评论 收藏
分享
评论
5
收藏
分享

创作者周榜

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