• 洛谷 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)的:博主很笨,请不要欺负他』✿✍

  • 相关阅读:
    tensorflow 镜像
    TDD、BDD、DDD
    Node.js结合Selenium做Web自动化测试
    Selenium 对元素element的操作举例
    Selenium UI 举例 getCssValue
    《测之重器——自动化测试框架搭建指南》
    《Robot Framework自动化测试修炼宝典》道长
    SQLServer中round函数
    SQLServer中对时间和长度的处理
    SQLServer中获取所有数据库名、所有表名、所有字段名的SQL语句
  • 原文地址:https://www.cnblogs.com/812-xiao-wen/p/9879275.html
Copyright © 2020-2023  润新知