NOIP2007 提高组 复赛 count 统计数字

来源:互联网 发布:企业危机网络 编辑:程序博客网 时间:2024/06/06 21:40

NOIP2007 提高组 复赛 count 统计数字

1.题意很快读懂,一开始,想用空间换时间,开个2*10^9+10的数组,但是很快放弃,太消耗空间了。

2.转换成开一个200000+10的结构体数组,结构体中存储数据,及其出现次数。

3.思路:在已有的数组中查找是否有输入数据雷同数据,有,数组中count++,无,在数组中添加新的数据。

4.测试样例的过程中,小错误不断,通过调试解决,主要要区分i与data_count。

5.编写的过程中小错误不断,第一次提交10分,用静态检查的方法,查到,冒泡排序过程中交换最后一句

data[k]=t;//此处笔误data[j]应该为t, 

6.提交40分,明白代码应该是没什么问题,问题出在应将冒泡排序改成效率更高的排序,比如快速排序。

耗时:45分钟

难度:中等

7.用了快速排序,提交,还是40分,奇了怪啊。

8.事后想了想,每读一个数据,都要进行查询及排序工作,显然不妥。

9.决定重写代码,猜测冒泡法能得80分,快速排序能得100分

10.思路如下,一次性将数据读完,之后将读好的数据自小到大排序,读取进新的数组,顺便做统计工作。

11.用冒泡排序,提交50分,用快速排序,提交100分。

12.本题的意图,快速排序。

13.本题对本人的启发,编程效率第一,写代码前要想一想时间复杂度,再进行编写。

14.若对快速排序有思想准备,同时注重效率第一,本题

耗时:30分钟

难度:简单

附上AC代码,编译环境Dev-C++4.9.9.2

//2007 count2 统计数字
#include <stdio.h>
#include <string.h>
struct node{
    int num;
    int count;
}b[200000+10];
int a[200000+10];

//快速排序
void quicksort(int left,int right){
    int i,j,temp,t;
    if(left>right)
        return;
    temp=a[left];
    i=left;
    j=right;
    while(i!=j){
        while(a[j]>=temp&&i<j)
            j--;
        while(a[i]<=temp&&i<j)
            i++;
        if(i<j){
            t=a[i];
            a[i]=a[j];
            a[j]=t;
        }
    }
    a[left]=a[i];
    a[i]=temp;
    quicksort(left,i-1);
    quicksort(i+1,right);
}

int main(){
    int n;
    int i,j;
    int temp;
    int bcount;
    memset(a,0,sizeof(a));
    memset(b,0,sizeof(b));
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    quicksort(0,n-1);
    b[0].num=a[0];
    b[0].count=1;
    bcount=1;
    for(i=1;i<n;i++)
        if(b[bcount-1].num==a[i]){
            b[bcount-1].count++;
        }else{
            b[bcount].num=a[i];
            b[bcount].count=1;
            bcount++;
        }
    for(i=0;i<bcount;i++)
        printf("%d %d\n",b[i].num,b[i].count);
}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 华为手机用户数据被锁定怎么办 朵唯手机丢了怎么办 网件r6220穿墙差怎么办 无线网打王者卡怎么办 酷翼x9忘了密码怎么办 楼上的路由器楼下不好使怎么办 电信4g网络不好怎么办 农村只有2g网怎么办 电信卡4g网速慢怎么办 小米手机触屏失灵怎么办 荣耀v10电信网速很慢怎么办 华为路由器掉线了怎么办 三星s6只识别一张卡怎么办 华为手机卡不显示了怎么办 华为账号手机卡丢了怎么办 荣耀8耗电量太快怎么办 vivo卡2不显示怎么办 电信宽带玩王者荣耀卡怎么办 联通4g玩游戏卡怎么办 华为悦盒遥控器丢了怎么办 6s不能用电信卡怎么办 iphone6电信卡无服务怎么办 魅族手机电信卡怎么办 小米手机读不出sim卡怎么办 魅蓝note6耗电快怎么办 oppo手机下载密码忘了怎么办 华为v9玩飞车卡怎么办 苹果7耳机转换器不支持怎么办 华为mate10耳机声音小怎么办 200打一年到期了怎么办 手机欠费变成2g怎么办 手机4g网用不了怎么办 手机玩王者荣耀卡怎么办 华为隐私空间密码忘记了怎么办 华为手机王者太卡怎么办 华为手机太卡怎么办呢 华为手机5x太卡!怎么办 华为手机玩游戏时太卡了怎么办? 买到华为翻新机怎么办 华为畅享8声音小怎么办 华为5a安全模式怎么办