雜湊學習筆記

2021-10-01 18:02:28 字數 2071 閱讀 3323

考慮具有以下形式的方程: a1x13 + a2x23 + a3x33 + a4x43 + a5x53 = 0

係數是從區間[-50,50]起的整數。 考慮解決方案(x1,x2,x3,x4,x5)來驗證方程xi∈[-50,50],xi!=

0,任何i∈。

確定滿足給定方程的解數。 輸入項 輸入的唯一行包含由空格分隔的5個係數a1,a2,a3,a4,a5。 輸出量

輸出將在第一行包含給定方程的解數。

sample input

37 29 41 43 47

sample output

直觀思路就是乙個個列舉,時間複雜度是o(n^5)

實際上,我們可以把它變形成:

a1x13+a2x23+a3x23=-(a4x43+a5x53)

分兩部分處理,一次處理左邊雜湊,一次列舉右邊進行判斷

因為同乙個值出現有多種情況,所以還要儲存次數:

code:

#includeusing namespace std;

const unsigned long long maxn=999999999;

const int p=133301;

int h[1000001],num[1000001],val[1000001],nxt[1000001],tot;

void put(long long x)

} if(flag)else num[i]++;//儲存次數

}int find(int x)

} if(flag) return 0;

else return num[i];

}int a[5];

long long getx(long long x)

int ans;

int main()//第二部分

cout《時間複雜度是o(n3+n2)

然後是一道類似的:

poj2785 4個總和為0的值

描述

sum問題可以表示為:給定四個具有整數值的列表a,b,c,d,計算多少個四元組(a,b,c,d)∈a x b x c x d使得a + b

輸入檔案的第一行包含列表n的大小(該值可以最大為4000)。然後,我們有n行包含四個分別屬於a,b,c和d的整數值(絕對值最大為2 28)。

輸出量對於每個輸入檔案,您的程式必須編寫四倍數,其總和為零。 樣本輸入

6-45 22 42 -16

-41 -27 56 30

-36 53 -37 77

-36 30 -75 -46 26 -38 -10 62

-32 -54 -6 45 樣本輸出

同樣的思路,我們分兩撥處理

code:

#includeusing namespace std;

const unsigned long long maxn=999999999;

const int p=4000*4000+7;//這裡的素數很毒

int h[p+10],nxt[p+10],num[p+10],val[p+10],tot;

inline void add(int k,int x)

void put(int x)

}if(flag)num[i]++;

}int find(int x)

}if(flag) return 0;

else return num[i];

}int a1[4001],a2[4001],a3[4001],a4[4001],n;

int ans;

int main(){

cin>>n;

for(int i=1;i<=n;i++) cin>>a1[i]>>a2[i]>>a3[i]>>a4[i];

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++) put(a1[i]+a2[j]);

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++) ans+=find(-(a3[i]+a4[j]));

cout《未完待續

學習筆記 雜湊學習筆記

hash基本原理 hash就是乙個像函式一樣的東西,你放進去乙個值,它給你輸出來乙個值。輸出的值就是hash值。一般hash值會比原來的值更好儲存 更小 或比較。那字串hash就非常好理解了。就是把字串轉換成乙個整數的函式。而且要盡量做到使字串對應唯一的hash值。它的主要思路是選取恰當的進製,可以...

雜湊學習筆記

雜湊錶用的是陣列支援按照下標隨機訪問資料的特性,所以雜湊表其實就是陣列的一種擴充套件,由陣列演化而來。可以說,如果沒有陣列,就沒有雜湊表。它是乙個函式。我們可以把它定義成hash key 其中 key 表示元素的鍵值,hash key 的值表示經過雜湊函式計算得到的雜湊值。三點雜湊函式基本要求 開放...

雜湊學習筆記

大概日後會更新 零.hash的用途 在資料範圍不大的時候,你完全可以用乙個map或者set來搞定 如果可以用c 11,你還可以用undered map來搞定 然鵝map也是hash實現的 所以當資料範圍很大 你莫得c 11 出題人毒瘤的時候,就需要雜湊 為了愉快的進行hash,下面煮的栗子預設出題人...