zoukankan      html  css  js  c++  java
  • 2007提高。。。。。统计数组。。坑

    题目:

    某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9)。已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。

    数据范围:

    40%的数据满足:1<=n<=1000
    80%的数据满足:1<=n<=50000
    100%的数据满足:1<=n<=200000,每个数均不超过1 500 000 000(1.5*109)


                看完数据范围就懵逼了····

                什么鬼数据,,,死大死大的,,

    Time Limit Exceeded

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=233333;
    int a[maxn]={},sum[maxn]={},shu[maxn];
    int main()
    {
        a[0]=0;
        int n,c=0,min,max,b=1;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        sort(a+1,a+1+n);
        max=a[n];
        min=a[1];
        a[n+1]=0;
        for(int i=min;i<=max;i++)
        {
            int he=0;
            for(int j=b;j<=n;j++)
            {
                if(a[j]!=i)
                    break;
                if(a[j]==i)
                {
                    he++;
                    sum[c]=he;
                    shu[c]=i;
                }
                if(a[j]!=a[j+1])
                {
                    c++;
                    b=j+1;
                    break;
                }
            }
        }
        for(int i=0;i<c;i++)
            cout<<shu[i]<<" "<<sum[i]<<endl;
        return 0;
    }

    好不容易想出来的,,,最后超时了。。心痛。。


    但是,在聪明的我费尽心思之后终于想出了正确的代码!!!!

    Accepted

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=233333;
    int a[maxn]={},sum[maxn]={},shu[maxn],b[maxn]={};
    int main()
    {
        int n,c=0,d=0,he=0;
        cin>>n;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        sort(a+1,a+1+n);
        for(int i=1;i<=n;i++)
        {
            if(a[i]!=b[d])
            {    
                d++;
                b[d]=a[i];
            }
        }
        d=1;
        for(int i=1;i<=n;i++)
        {
            if(a[i]==b[d])
            {
                he++;
                shu[d]=a[i];
                sum[d]=he;
            }
            if(a[i]!=a[i+1])
            {
                d++;
                he=0;
            }
        }
        for(int i=1;i<d;i++)
            cout<<shu[i]<<' '<<sum[i]<<endl;
        return 0;
    }

    为自己鼓掌!!!!!

    啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪啪

  • 相关阅读:
    Maven最全指南,看了必懂(转载)
    MySQL:数据库优化
    关于 MyBatis 10 种通用的写法
    Redis 性能问题分析(转载)
    前端对于服务端渲染(SSR)的理解
    JS 中的编码和解码(encode和decode)
    SEO、SPA、SSR的区别关系详解
    VUE 项目路由的两种模式(hash、history)
    Chrome和IE浏览器的渲染过程区别
    对于前端缓存的理解(缓存机制和缓存类型)
  • 原文地址:https://www.cnblogs.com/zyker/p/5879212.html
Copyright © 2011-2022 走看看