【ACM算法】-- Hash篇 - 哈希问题

第一题:
在这里插入图片描述
这道算法题算是非常简单了,直接用Hash思想即可解决问题。

代码如下:

#include<stdio.h>
int n;
int s;
int isFirst=1;//如果有格式要求,则定义是否是第一个,如果不是第一个就要先输出一个回车在输出数
int main(){
    freopen("in.txt","r",stdin);

    while(scanf("%d",&n)!=EOF&&n!=0){
        int score[101]={0};//非常简单的初始化方法
        while(n--){
            int tmp;
            scanf("%d",&tmp);
            score[tmp]++;
        }

        scanf("%d",&s);
        if(isFirst){
                printf("%d",score[s]);
                isFirst=0;
        }
        else{
            printf("\n%d",score[s]);
        }

    }
return 0;
}

第二题:
在这里插入图片描述
注意:这道题虽然叫sort,但是不能用sort函数,因为这个n的范围是百万范围,如果用sort的话,sort的复杂度是O(nlogn)这样的话会超时,但是如果我们用一个数组,采用hash思想,只需要遍历一遍数组即可。

代码如下:

#include<stdio.h>
#define OFFSET 500000
int a[1000001];
int n,m;
int main(){
    freopen("in.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF){
        for(int i=0;i<1000001;i++){
            a[i]=0;
        }
        while(n--)
        {
            int tmp;
            scanf("%d",&tmp);
            a[tmp+OFFSET]=1;
        }
        for(int k=1000000;k>=0;k--){
            if(a[k]==1){
                printf("%d",k-OFFSET);
                m--;
                if(m==0){
                    printf("\n");
                    break;
                }
                else{
                    printf(" ");
                }
            }
        }

    }
return 0;
}

发布了83 篇原创文章 · 获赞 15 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_42127861/article/details/104281815