集合(normal)
time limit:2000ms memory limit:65536k
total submit:563 accepted:182
description
給定兩個集合a、b,集合內的任一元素x滿足1 ≤ x ≤ 109,並且每個集合的元素個數不大於105。我們希望求出a、b之間的關係。
任 務 :給定兩個集合的描述,判斷它們滿足下列關係的哪一種:
a是b的乙個真子集,輸出「a is a proper subset of b」
b是a的乙個真子集,輸出「b is a proper subset of a」
a和b是同乙個集合,輸出「a equals b」
a和b的交集為空,輸出「a and b are disjoint」
上述情況都不是,輸出「i'm confused!」
input
輸入有兩行,分別表示兩個集合,每行的第乙個整數為這個集合的元素個數(至少乙個),然後緊跟著這個集合的元素(均為不同的正整數)
output
只有一行,就是a、b的關係。
sample input
樣例12 55 27
2 55 27
樣例23 9 24 1995
2 9 24
樣例33 1 2 3
4 1 2 3 4
樣例43 1 2 3
3 4 5 6
樣例52 1 2
2 2 3
sample output
樣例1a equals b
樣例2b is a proper subset of a
樣例3a is a proper subset of b
樣例4a and b are disjoint
樣例5i'm confused!
//思路:很簡單經典普通的hash,自己看吧,都可以作為模板了……
constmax=1580089;//開大一點,不然效率會很低
var f:array[0..max] of longint;
a:array[0..1200000]of longint;
ans,an,bn,j:longint;
function locate(x:longint):longint;
var i:longint;
begin
i:=x mod max;
while (f[i]<>0)and(f[i]<>x)do inc(i);//確定位置存放f[-]
f[i]:=x;
end;
procedure ok(x:longint);
var i:longint;
begin
i:=x mod max;
while (f[i]<>0)and(f[i]<>x) do i:=i+1;//尋找f[-]
if f[i]=x then inc(ans);//判斷啦,根據題意
end;
begin
read(an);
for j:=1 to an do
begin
read(a[j]);
locate(a[j]);
end;
read(bn);
for j:=1 to bn do
begin
read(a[j]);
ok(a[j]);//我的想法是存入乙個陣列,另乙個用來比較
end;
if (an=bn)and(ans=an)and(ans=bn)then write('a equals b')else//利用an,bn的長度和ans的大小可以直接判斷
if (anbn)and(ans=bn)then write('b is a proper subset of a')else
if (ans=0) then write('a and b are disjoint') else
write('i''m confused!');//記得打'!!!!
end.
Hash 雜湊 雜湊
hash 一種用於查詢的資料結構 雜湊查詢的前提是已經一定的規則方法建好了雜湊表。基本思想是 關鍵字 位址轉換法 以資料物件的關鍵字為自變數,通過乙個確定的函式關係h,計算出對應的函式值h key 把這個值解釋為資料物件的儲存位址,並按此存放,即儲存位置 h key 關鍵 1.構造好的雜湊函式 2....
雜湊(hash 雜湊表)
可以認為雜湊有著陣列的思想,它將所有的資料段拼成乙個陣列 順序表 進行儲存,通過雜湊函式,可以基本上以o 1 的時間複雜度來查詢和儲存資料。通過資料段中的唯一關鍵字 key 經過某種演算法,得出此資料段在整個雜湊陣列 順序表 中的的下標,然後直接取元素即可。有資料結構如下 資料段 key,value...
Hash和雜湊 雜湊 表
hash又稱為雜湊,是把任意長度的輸入 又叫做預對映pre image 通過雜湊演算法變成固定長度的輸出,該輸出就是雜湊值。hash演算法還有乙個特點,就是很難找到逆向規律。在同一函式下,如果兩個雜湊值是不相同的,那麼這兩個雜湊值的原始輸入也是不同的。hash演算法又被稱為雜湊演算法。雖然被稱為演算...