1055. 走廊

题目描述

有一个M行N列的教室座位中,有D对同学总爱凑在一起讲话。现老师要用走廊隔开他们。但只能在行之间加入K条走廊,在列中加入L条走廊,问加在哪里能使效果最佳。(一对爱讲话的同学只有左右相邻或上下相邻)。

输入

第一行,有5各用空格隔开的整数,分别是M,N,K,L,D(2<=N,M<=1000,0<=K<M,0<=L<N,D<=2000)。接下来D行,每行有4个用空格隔开的整数,第i行的4个整数Xi,Yi,Pi,Qi,表示坐在位置(Xi,Yi)与(Pi,Qi)的两个同学会交头接耳(输入保证他们前后相邻或者左右相邻)。输入数据保证最优方案的唯一性。

输出

共两行。第一行包含K个整数,a1a2……aK,表示第a1行和a1+1行之间、第a2行和第a2+1行之间、…、第aK行和第aK+1行之间要开辟通道,其中ai< ai+1,每两个整数之间用空格隔开(行尾没有空格)。第二行包含L个整数,b1b2……bk,表示第b1列和b1+1列之间、第b2列和第b2+1列之间、…、第bL列和第bL+1列之间要开辟通道,其中bi< bi+1,每两个整数之间用空格隔开(行尾没有空格)。若有多组答案,输出字典序最小的一组。

样例输入

4 5 1 2 3
4 2 4 3
2 3 3 3
2 5 2 4

样例输出

2
2 4

数据范围限制

C++代码

#include <iostream>
#include <cstring>
#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
#include <cassert>using namespace std;//#define CPP_STL_MAP_VECTOR class WP
{public:int weight; // weightint roc;    // row or column
};const int MAX_M = 1000;
const int MAX_N = 1000;
const int MAX_D = 2000;
const int MAX_L = MAX_N-1; // L < N
const int MAX_K = MAX_M-1; // K < M#ifdef CPP_STL_MAP_VECTORvector<WP> all_row_corridors_vec;
vector<WP> all_col_corridors_vec;map<int, int> all_row_corridors_mp;
map<int, int> all_col_corridors_mp;#elseWP all_row_corridors[MAX_L];
WP all_col_corridors[MAX_K];#endifbool comp(const WP &wp1, const WP &wp2)
{if (wp1.weight == wp2.weight){return wp1.roc < wp2.roc;  // sort ascending by roc        }else{return wp1.weight > wp2.weight;  // sort descending by weight}
}int main()
{int M, N, K, L, D;cin >> M >> N >> K >> L >> D;assert(N>=2 && N <= MAX_N && N > L);assert(M>=2 && M <= MAX_M);assert(K>=0 && K < M);assert(L>=0 && L < N);assert(D>=0 && D <= MAX_D && D > L);#ifndef CPP_STL_MAP_VECTOR for(int row=1; row<=MAX_L; row++){all_row_corridors[row-1].roc    = row;all_row_corridors[row-1].weight = 0;}for(int col=1; col<=MAX_K; col++){all_col_corridors[col-1].roc    = col;all_col_corridors[col-1].weight = 0;}
#endifint Xi, Yi, Pi, Qi;int max_col = 0, max_row = 0;for (int row=1; row<=D; row++){cin >> Xi >> Yi >> Pi >> Qi;// check each pair students, and// calculate the corresponding corridors' weight if (Xi == Pi){#ifdef CPP_STL_MAP_VECTOR all_col_corridors_mp[min(Yi, Qi)]++;
#elseall_col_corridors[min(Yi, Qi) - 1].weight++;max_col = max(max_col, min(Yi, Qi));
#endif}else if (Yi == Qi){#ifdef CPP_STL_MAP_VECTORall_row_corridors_mp[min(Xi, Pi)]++;
#elseall_row_corridors[min(Xi, Pi) - 1].weight++;max_row = max(max_row, min(Xi, Pi));
#endif}}#ifdef CPP_STL_MAP_VECTORWP wp;map<int, int>::iterator curr;for (curr=all_col_corridors_mp.begin();curr!=all_col_corridors_mp.end();curr++){wp.roc    = curr->first;wp.weight = curr->second;all_col_corridors_vec.push_back(wp);}for (curr=all_row_corridors_mp.begin();curr!=all_row_corridors_mp.end();curr++){wp.roc    = curr->first;wp.weight = curr->second;all_row_corridors_vec.push_back(wp);      }sort(all_row_corridors_vec.begin(), all_row_corridors_vec.end(), comp);sort(all_col_corridors_vec.begin(), all_col_corridors_vec.end(), comp);
#elsesort(all_row_corridors, all_row_corridors+max_row, comp);sort(all_col_corridors, all_col_corridors+max_col, comp);
#endif// sort and output corridor(s) between rowsvector<int> output_corridors_between_rows;for(int row=1;row<=K; row++){#ifdef CPP_STL_MAP_VECTORoutput_corridors_between_rows.push_back(all_row_corridors_vec[row-1].roc);
#elseoutput_corridors_between_rows.push_back(all_row_corridors[row-1].roc);
#endif}sort(output_corridors_between_rows.begin(), output_corridors_between_rows.end());copy(output_corridors_between_rows.begin(), output_corridors_between_rows.end(), ostream_iterator<int>(cout, " "));cout << endl;// sort and output corridor(s) between columnsvector<int> output_corridors_between_cols;for(int col=1;col<=L; col++){#ifdef CPP_STL_MAP_VECTORoutput_corridors_between_cols.push_back(all_col_corridors_vec[col-1].roc);
#elseoutput_corridors_between_cols.push_back(all_col_corridors[col-1].roc);
#endif}sort(output_corridors_between_cols.begin(),output_corridors_between_cols.end());copy(output_corridors_between_cols.begin(),output_corridors_between_cols.end(), ostream_iterator<int>(cout, " "));cout << endl;return 0;
}

CCF NOI1055. 走廊 (C++)相关推荐

  1. CCF CSP 201609-2 火车购票

    题目链接:http://118.190.20.162/view.page?gpid=T46 问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排 ...

  2. ccf Markdown

    说实话,这种题如果给我返回结果我是一定可以写出来的但是ccf不返回结果很烦,这种题我根本不能一次写对.还有重写时发现好多考试之前根本没注意到的点比如删掉空行 .......=_= #include&l ...

  3. I'm stuck! ccf模拟题。

    ccf模拟题. I'm stuck! 时间限制: 1.0s 内存限制: 256.0MB 问题描述 给定一个R行C列的地图,地图的每一个方格可能是'#', '+', '-', '|', '.', 'S' ...

  4. 计算机协会成立活动简报,“中国计算机学会CCF走进高校”活动在我校举行

    校新闻中心讯 9月13日下午,由中国计算机学会(CCF)主办的"CCF走进河南科技大学"活动在工科二号楼610举行.副校长魏世忠教授出席活动并致辞.长江学者.国家杰出青年基金获得者 ...

  5. 绿盟科技与CCF成立“鲲鹏”科研基金 计划发力5大领域资助16个项目

    [51CTO.com原创稿件]2017年5月10日,由中国计算机学会(CCF)和北京神州绿盟信息安全科技股份有限公司(以下简称:绿盟科技)主办的2017 CCF-绿盟科技"鲲鹏"科 ...

  6. WC2018 CCF程序设计教学比赛记事

    WC2018   d5 教师比赛日  亦或者称之为以"递归"为主题的同课异构课程(25节课 有8节讲递归) 发现强省或者弱省中名校派出的选手还是非常优秀的,这种优秀,从他的教态.自 ...

  7. 徐韬:CCF - 个贷违约预测Baseline

    徐韬是华北电力大学数理系大四的学生,Datawhale成员/Dreamtech成员,参加了多期Datawhale的组队学习,也在天池/CCF/讯飞等比赛中取得了不错的成绩,现保送大连理工大学软件学院深 ...

  8. 赴约北大,2019 CCF大数据与计算智能大赛正式启动

    8月17日,以"数据驱动,智创未来"为主题的2019 CCF大数据与计算智能大赛(2019 CCF BDCI)全球启动仪式,在北京大学英杰交流中心·阳光厅正式启幕.自2013年创办 ...

  9. CCF推荐系统项目代码解读!

    Datawhale干货 作者:阿水,北京航空航天大学,Datawhale成员 本文以CCF大数据与计算智能大赛(CCF BDCI)图书推荐系统竞赛为实践背景,使用Paddle构建用户与图书的打分模型, ...

最新文章

  1. i386平台和x86-64平台机器代码的区别
  2. 专访阿里资深研发工程师窦贤明:PG与商业数据库差距并不明显
  3. 网络爬虫:分离生产者和消费者来优化爬虫程序
  4. Qt鼠标拖动绘制基本几何图形
  5. 转载 maven 详解 http://www.cnblogs.com/binyue/p/4729134.html
  6. win11系统txt文件怎么加密 windows11txt文件加密的解决方法
  7. Day 1 MySQL数据库
  8. 亲测window+iis+letsencrypt+ssl 手动续期(通配符域名)
  9. 经典CNN网络:VGG16-输入和输出
  10. 基于Matlab的SLIC超像素分割算法分析
  11. *明确插件的功效*千千静听听音效插件使用介绍及相关下载
  12. C4D材质原理揭秘笔记-初学必看
  13. CSS菜鸟教程自学2,Text文本
  14. 怎么压缩图片的体积大小,4款软件分享
  15. 民俗多种内涵-农业大健康·万祥军:牛首山谋定世外桃源
  16. Hyper-V安装Server 2019虚拟机
  17. 互连网、互联网、因特网、万维网、局域网、以太网 区别
  18. 关于微信小程序云开发以及云开发实例展示
  19. 安卓课程设计之记账本_课程设计:基于安卓的记账本.pdf
  20. linux远程打印,SUSE 远程打印

热门文章

  1. 全国计算机等级三级Linux应用与开发技术考试大纲(2021年版)
  2. 运维搭建邮件服务器,系统运维|如何在 Ubuntu 环境下搭建邮件服务器(二)
  3. 如何查看服务器内存使用情况--top
  4. 数据库访问-records库
  5. 【预测模型】基于灰狼算法优化BP神经网络实现数据预测matlab代码
  6. 程序员、架构师、技术经理、技术总监和CTO都是干什么的?
  7. 好好珍惜现在所拥有的(看完不要掉眼泪哦)
  8. 计算机正在获取网络地址,本地连接一直正在获取网络地址怎么办,教您解决方法...
  9. Android中的代理模式
  10. cmd查询mysql版本