zoukankan      html  css  js  c++  java
  • 题解 P1059 【明明的随机数】

    不会其他排序的小金羊又来水题了
    本题我的思路:堆排,速度不需要算很快,AC就可以...

    注意:初学者不宜抄此代码(压行严重)

    code:

    #include <cstdio>
    #include <cstring>
    #include <queue>//调用优先队列请使用<queue> 
    using namespace std;
    //对于这道题,我们使用堆排序
    //因为堆的代码过于长(不会),而模拟又太耗空间(不会DP) 
    //不妨使用stl的优先队列(本质是大、小根堆)
    //空间复杂度:nlog(n) 
    priority_queue<int,vector<int>,greater<int> >q;
    void work()
    {
    	int n,x,num=0;
    	scanf("%d",&n);
    	bool flag[1001];
    	memset(flag,0,sizeof(flag));//清零 
    	for (int i=1;i<=n;i++)
    	{
    		scanf("%d",&x);
    		if (flag[x]==1){continue;}
    		flag[x]=1;num++;q.push(x);
    	}
    	printf("%d
    ",num);
    	for (int i=1;i<=num;i++)
    	{x=q.top();q.pop();printf("%d",x);
    		if (i!=num)printf(" "); 
    	}
    }
    int main()
    {
    	work();
    	return 0;
    }
    

    这里声明,因为没有研究过set(集合),所以
    数据整理上面会有些问题...
    采取的办法也很简单,仅仅需要输入的时候不重复压进去就可以。
    采用的方法类似桶排。。。

    核心code:

    void work()
    {
        /*前面:省略*/
        bool flag[1001];
        memset(flag,0,sizeof(flag));//清零 
        for (int i=1;i<=n;i++)
        {
            scanf("%d",&x);
            if (flag[x]==1){continue;}
            flag[x]=1;num++;q.push(x);
        }
        /*后面:省略*/
    }
    

    耗时情况:26ms,824kb

  • 相关阅读:
    带编译器的codeblocks下载地址
    联想拯救者s15k重装w10系统教程
    w10下Oracle 11g完全干净卸载
    小机房的树(codevs 2370)
    NOIP[2015] 运输计划(codevs 4632)
    ⑨要写信(codevs 1697)
    酒厂选址(codevs 1507)
    美丽的大树(codevs 2124)
    乘法运算(codevs 3254)
    货车运输(codevs 3287)
  • 原文地址:https://www.cnblogs.com/jelly123/p/10385892.html
Copyright © 2011-2022 走看看