zoukankan      html  css  js  c++  java
  • (水题)Codeforces

    https://codeforces.com/problemset/problem/4/C

    用来哈希的一道题目,用map也可以强行过,但是性能慢了6倍,说明是在字符串比较的时候花费了接近6倍的时间。

    假如时间性能允许的话不妨用map存hash值,这样就可以让他自然溢出了。基数我喜欢选23333,溢出选择ll自然溢出(反正是map存的可以是负的)

    自带hash型map,也是慢到感人。

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    string s;
    unordered_map<string,int>m;
    
    int main(){
        scanf("%d",&n);
        while(n--){
            cin>>s;
            m[s]++;
            if(m[s]==1)
                printf("OK
    ");
            else
                printf("%s%d
    ",s.c_str(),m[s]-1);
        }
    
    }

    自写传说中(不满足递推的但是分布很不错的)DJB哈希,时间性能非常不错。

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    int n;
    char s[40];
    
    map<ll,int> m;
    
    ll DJBhash(){
        ll hash=5381;
        int l=strlen(s);
        for(int i=0;i<l;i++){
            hash=((hash<<5)+hash)+s[i];
        }
        return hash;
    }
    
    
    int main(){
        scanf("%d",&n);
        while(n--){
            scanf("%s",s);
            ll res=DJBhash();
            int t=m[res]++;
            if(t==0)
                printf("OK
    ");
            else
                printf("%s%d
    ",s,t);
        }
    
    }
  • 相关阅读:
    机器学习进度(六)—— 主成分分析
    留言版
    打赏
    第十四周总结
    第十三周总结
    软件测试读后感(二)
    第十二周总结
    第十一周总结
    软件测试读后感(一)
    虚拟机常用shell命令
  • 原文地址:https://www.cnblogs.com/Yinku/p/10280289.html
Copyright © 2011-2022 走看看