HDU 4334 Trouble(雜湊 線性查詢)

2021-09-08 19:52:29 字數 1220 閱讀 5317

給定五個集合。問是否能從五個集合各取乙個元素,使得元素之和為0.

這道題有兩種做法,一種是雜湊,然而之前沒寫過雜湊.....比賽後從大神那copy了乙份。

這裡說還有一種。

對於這五個集合分為三組。1,2組求和為一組,3,4組求和分為一組,5為一組。

那麼如今轉化為了是否能從前兩組中各取乙個元素。使得這兩個值和為第三組乙個元素的相反數。

那麼對於第一組我們公升序排序。第二組我們降序排序。

對於第三組裡的任一元素,假如第一組隊首加第二組隊首之和大於第三組的元素。那麼第二組游標往後移一位,反之第一組移一位,

那麼這個查詢時間就為o(m),m為陣列元素個數。

那麼總的時間複雜度為o(n*n*n).

#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6 

#define ll long long

#define pii pairusing namespace std;

//const int maxn = 100 + 5;

//const int inf = 0x3f3f3f3f;

ll s[6][205];

ll s12[200*202], s34[200*202];

int n;

bool check(ll t)

return false;

}int main()

int y1 = 0;

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

} int y2 = 0;

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

}// cout << y1 << y2 << endl;

sort(s12, s12+n*n);

sort(s34, s34+n*n);

int tag = 0;

for(int i = 0; i < n; i++) if(check(-s[4][i]))

// cout << check(4) << endl;

if(tag) puts("yes");

else puts("no");

} return 0;

}

hdu4334 Trouble (有技巧的暴力)

說一下大概題意 給你5個陣列,每個陣列裡有相同數量的元素,讓你判斷是否能在每個陣列中選取1個元素,使得取完5個數後,相加為0 思路 第一次就是直接寫了五個for語句,然後意料之中超時了。第二次想到了有個叫折半列舉的方法,於是就把5個陣列分為了2和3,用乙個新陣列儲存前兩個陣列相加的所有結果過,再用乙...

HDU 4334 尺取 思維

題意 在5個陣列中,每個陣列中取乙個數,5個數之和是否為0 第一次我是用map標記前3個陣列的和,然後暴力跑後兩個陣列的迴圈,果然t了。網上又兩種做法 處理前三個陣列的和,後兩個陣列的和,排序 列舉 二分。我自己沒試過不知道能過不 t n 3 n 2 log n 3 log n 2 n 2 log ...

hdu1053(哈夫曼編碼)

題意是,給出一排字串,要求求出字元的8位編碼的長度,哈夫曼編碼值,以及之間的比值 因為僅僅只要求求出哈夫曼編碼值,所以不用建立哈夫曼樹,可以建立優先佇列,只要將每次最小的 出隊的兩個元素合成乙個新的大數,然後放進優先佇列中,直到只剩下乙個元素為止,那個元素就是哈夫曼編碼值。注意只有一種字元的情況 a...