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);
        }
    
    }
  • 相关阅读:
    Android相关sdk使用
    Uniscribe文字自动换行
    Chrome RenderText分析(2)
    c++智能指针
    codepage IMLangCodePages
    GUI 快捷键的实现思路
    买车险
    九年---祝爱永存!
    算法
    Windows内核安全与驱动开发
  • 原文地址:https://www.cnblogs.com/Yinku/p/10280289.html
Copyright © 2011-2022 走看看