zoukankan      html  css  js  c++  java
  • 洛谷 P1056 排座椅 桶排序

    桶排序大法好!

    每次一看到这种范围小的题,本萌新就想用桶排。

    因为题目中的m,n都小于1000,我们就可以定义两个1000的数组,表示每一行或每一列可以隔开几对讲话的童鞋。

    然后再定义两个1000的数组用来对前两个数组的值进行桶排序,再用通道总数从大到小减下去直到为零,记录最后这个数,凡是能隔开这么多对讲话的同学的通道,就能输出。

    主要程序:

    #include<iostream>
    using namespace std;
    int a[1001],b[1001],p[1001],q[1001];
    int c1,c2,c3,c4,i,j,o,m,n,k,l,d;//准备工作 
    int main(){
    	cin>>m>>n>>k>>l>>d;//输入 
    	for(i=1;i<=d;i++){
    		cin>>c1>>c2>>c3>>c4;
    		if(c1==c3)b[min(c2,c4)]++;//行相同,两个同学中间那一列加一 
    		else a[min(c1,c3)]++;//列相同,行增加 
    	}
    	for(i=1000;i>=1;i--){
    		if(a[i])p[a[i]]++;//对行能隔开的同学数桶排序 
    		if(b[i])q[b[i]]++;//对列能隔开的同学数桶排序 
    	}
    	for(i=1000;k>0;i--)if(p[i])k-=p[i];//*用总行(列)数从大往小减,得出来的数为 
    	for(j=1000;l>0;j--)if(q[j])l-=q[j];//要输出的行列最小应该达到的隔开同学的数目 
    	for(o=1;o<=1000;o++)if(a[o]>i)cout<<o<<" ";
    	cout<<endl;//换行符别丢了 
    	for(o=1;o<=1000;o++)if(b[o]>j)cout<<o<<" ";
        return 0;
    }
    

    这是我的博客,发的题解和一些洛谷技巧都在里面。

    另外,本人真的只是一个弱弱的萌新,7月份才入信息组,发的题解讨论等级不高,新人可看。

    ✐☎博主撰文不易,转载还请注明出处;若对本文有疑,请私信或在下方讨论中提出。O(∩_∩)O谢谢!☏

    ☃〔尽管小伙伴们肯定有千百种方式针对,但博主还是极其非常十分不要脸的把反对键吃掉辣!〕☃

    ✿『$At$ $last$:非常一(hu)本(shuo)正(ba)经(dao)的:博主很笨,请不要欺负他』✿✍

  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/812-xiao-wen/p/9879275.html
Copyright © 2011-2022 走看看