手書きハッシュ(加数の単純なクエリを達成)

トピック:

多くの商品は、N(0 <= N <= 1E6)で動作し、あります

加数の操作:品物の数が×印に入力されました

クエリ:X財のために入力した番号がマークされているかどうかを問い合わせ

アイデア:

このトピックは非常に簡単ですが、ハッシュアルゴリズムを試してみたい、手書きのハッシュ最も重要なことは、適切に紛争を処理することです。

コード:

#include <ビット/ STDC ++。H>
 に#define INF 0x3f3f3f3f
 の#define FRE()freopenは( "in.txt"、 "R"、STDIN)
 の#define FRO()freopenは( "out.txtを"、 "W"、STDOUT )使用して名前空間はstdを、
typedefの長い長いLL。
const int型 MAXN = 1E6 + 10 const int型 MOD = 1E6 + 7 INT [MAXN];融点 ボイド addNum(INT X)
{ int型、T = X。
    X = X%MOD。
    一方、
    {

    


    
        場合(![X] MP)
        { 
            MP [X] = Tと、
            返します
        } 
        もし(!MP [X] = T)// 处理冲突 
            X =(X + 1)%のMAXN。
        他の リターン; 
    } 
} 

ブールクエリ(INT X)
{ 
    int型、T = X。
    X = X%MOD。
    しばらく
    { 
        場合(MP [X]!)を返す もし(MP [X]!=T)
            X =(X + 1)%のMAXN。
        他に 返す 
    } 
} 

int型のmain()
{ 
    int型N; 
    scanf関数(" %のD "、&N)
    一方、(N-- 
    { 
        int型、O、X、IDX。
        scanf関数(" %dの%のD "、&​​O&X)。
        もし(O == 0 
        { 
            addNum(X + 1 )。
        } 
        
        {
            もし(クエリ(X + 1))のprintf(" はい\ N " );
            のprintf(" なし\ nを" ); 
        } 
    } 
    戻り 0 
}

 

おすすめ

転載: www.cnblogs.com/sykline/p/10959254.html