zoukankan      html  css  js  c++  java
  • COGS 74. [NOIP2006] 明明的随机数 (Splay小练习。。)

    ☆   输入文件:random.in   输出文件:random.out   简单对比
    时间限制:1 s   内存限制:128 MB

    【问题描述】
        明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了 N 个 1 到 1000 之间的随机整数( N ≤ 100 ),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按 照 排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

    【输入格式】 
         输入文件 random.in 有 2 行,第 1 行为 1 个正整数,表示所生成的随机数的个数:N

         第 2 行有 N 个用空格隔开的正整数,为所产生的随机数。

    【输出格式】 
         输出文件 random.out 也是 2 行,第 1 行为 1 个正整数 M ,表示不相同的随机数的个数。第 2 行为 M 个用空格隔开的正整数,为从小到大排好序的不相同的随机数。

    【输入输出样例】
     
    输入: 
    10
    20 40 32 67 40 20 89 300 400 15

    输出:
    8
    15 20 32 40 67 89 300 400

    splay练习 。。

    屠龙宝刀点击就送

    #include <ctype.h>
    #include <cstdio>
    bool vis[150];
    int siz[150],cnt[150],n,data[150],cn,root,tot,fa[150],ch[150][2];
    void read(int &x)
    {
        x=0;bool f=0;
        register char ch=getchar();
        for(;!isdigit(ch);ch=getchar()) if(ch=='-') f=1;
        for(;isdigit(ch);ch=getchar()) x=x*10+ch-'0';
        x=f?(~x)+1:x;
    }
    inline void pushup(int rt)
    {
        int l=ch[rt][0],r=ch[rt][1];
        siz[rt]=siz[l]+siz[r]+cnt[rt];
    }
    void ins(int &rt,int x)
    {
        if(rt==0)
        {
            rt=++tot;
            data[tot]=x;
            siz[tot]=cnt[tot]=1;
            return;
        }
        if(x==data[rt])
        {
            cnt[rt]++;
            siz[rt]++;
            return;
        }
        if(x<data[rt])
        {
            ins(ch[rt][0],x);
            fa[ch[rt][0]]=rt;
            pushup(rt);
        }
        else 
        {
            ins(ch[rt][1],x);
            fa[ch[rt][1]]=rt;
            pushup(rt);
        }
    }
    int getkth(int rt,int k)
    {
        int l=ch[rt][0];
        if(siz[l]+1<=k&&k<=siz[l]+cnt[rt]) return data[rt];
        if(k<siz[l]+1) return getkth(ch[rt][0],k);
        if(siz[l]+cnt[rt]<k) return getkth(ch[rt][1],k-(siz[l]+cnt[rt]));
    }
    int main()
    {
        freopen("random.in","r",stdin);freopen("random.out","w",stdout);
        read(n);
        for(int a,i=1;i<=n;i++)
        {
            read(a);
            if(!vis[a])
            {
                vis[a]=1;
                cn++;
                ins(root,a);
            }
        }
        printf("%d
    ",cn);
        for(int i=1;i<=cn;i++) printf("%d ",getkth(root,i));
        return 0;
    }
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    【JBPM4】State 节点
    【JBPM4】EL表达式的使用,实现JAVA与JPDL的交互
    不常见的javascript调试技巧
    mac navicat premium 使用技巧
    fnb2b分支拉取注意事项
    mac上为nodejs设置环境变量
    nodejs项目进程管理器之pm2
    有关defer和async的区别
    关于viewport我自己的理解
    样式技巧总结
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7257414.html
Copyright © 2011-2022 走看看