HJ171 排座椅
题目题解(42)讨论(19)排行简单 通过率43.50% 时间限制1秒 空间限制50M知识点贪心校招时部分企业笔试将禁止编程题跳出页面为提前适应练习时请使用在线自测而非本地IDE。描述教室内共有 nn 行 mm 列座位坐在第 ii 行第 jj 列同学的位置记为 (i,j)(i,j)。为了方便进出班主任计划设置 kk 条横向通道贯穿整列的水平通道与 ll 条纵向通道贯穿整行的竖直通道。通道位于相邻两行或两列之间。班主任记录了 dd 对经常交头接耳的同学他们的位置 (xi,yi)(xi,yi) 与 (pi,qi)(pi,qi) 保证相邻上下或左右。她希望通过合理放置通道使尽可能多的交头接耳对被通道隔开。现请你输出唯一的最优方案在该方案下仍未被通道隔开的交头接耳对的数量最少。输入描述第一行输入五个整数 n,m,k,l,d(2≦n,m≦103; 0kn; 0lm; 0d≦2×min{n×m,2×103})n,m,k,l,d(2≦n,m≦103; 0kn; 0lm; 0d≦2×min{n×m,2×103})。接下来 dd 行每行输入四个整数 xi,yi,pi,qixi,yi,pi,qi表示坐标 (xi,yi)(xi,yi) 与 (pi,qi)(pi,qi) 的两位同学会交头接耳且两坐标上下相邻或左右相邻。保证最优方案存在且唯一。输出描述第一行输出 kk 个严格递增的整数 a1,a2,…,ak(1≦a1⋯ak≦n−1)a1,a2,…,ak(1≦a1⋯ak≦n−1)在行 aiai 与 ai1ai1 之间设置横向通道。第二行输出 ll 个严格递增的整数 b1,b2,…,bl(1≦b1⋯bl≦m−1)b1,b2,…,bl(1≦b1⋯bl≦m−1)在列 bibi 与 bi1bi1 之间设置纵向通道。示例1输入4 5 1 2 3 4 2 4 3 2 3 3 3 2 5 2 4复制输出2 2 4复制说明该样例如下图所示蓝底斜线方格为第一对交头接耳的同学绿底带叉方格为第二对交头接耳的同学粉底带星方格为第三对交头接耳的同学。粗线代表通道。该划分方案为唯一最优方案。示例2输入2 2 1 1 4 1 1 1 2 1 1 2 1 2 1 2 2 1 2 2 2复制输出1 1#include functional #include iostream #include unordered_map #includevector #includealgorithm using namespace std; int main() { int n,m,k,l,d;cinnmkld; unordered_mapint,introw,col; for(int i0;id;i){ int x1,y1,x2,y2;cinx1y1x2y2; //贪心同行 if(x1x2){ row[min(y1,y2)]; }//贪心同列 else if(y1y2){ col[min(x1,x2)]; } } vectorpairint,int vec_row,vec_col; for(autop:row){ vec_row.emplace_back(p.second,p.first); } for(autop:col){ vec_col.emplace_back(p.second,p.first); } //从大到小排序 sort(vec_row.begin(),vec_row.end(),greaterpairint,int ()); sort(vec_col.begin(),vec_col.end(),greaterpairint,int ()); //输出按从小到大 vectorintrows,cols; for(int i0;ilivec_row.size();i){ rows.push_back(vec_row[i].second); } for(int i0;ik;i){ cols.push_back(vec_col[i].second); } sort(rows.begin(),rows.end()); sort(cols.begin(),cols.end()); for(autoit:cols){ coutit ; } coutendl; for(autoit:rows){ coutit ; } } // 64 位输出请用 printf(%lld)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2504679.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!