洛谷P1102 A B數對 二分 雜湊

2021-10-08 08:02:19 字數 1537 閱讀 7447

出題是一件痛苦的事情!

相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a+b problem,改用 a-b 了哈哈!

好吧,題目是這樣的:給出一串數以及乙個數字 cc,要求計算出所有 a - b = ca−b=c 的數對的個數(不同位置的數字一樣的數對算不同的數對)。

輸入共兩行。

第一行,兩個整數 n, cn,c。

第二行,nn 個整數,作為要求處理的那串數。

一行,表示該串數中包含的滿足 a - b = ca−b=c 的數對的個數。

輸入 #1

411

123

輸出 #1

3
說明/提示

對於 75% 的資料,1≤n≤2000。

對於 100% 的資料,1≤n≤2×105 。

保證所有輸入資料都在 32 位帶符號整數範圍內。

這題暴力stl二分應該是比較簡單就可以做出來的。排序之後upper_bound-lower_bound累加一下即可。

雜湊做法的話一開始我調了很久都沒有搞出來,也不知道是**出問題。後面不知改了什麼很玄學的東西就很突然地過了。其實跟前面的題沒啥區別,輸入之後把這個數直接定位(**中的dw函式),然後累加這個數出現的個數。進入雜湊表就隨便用乙個比較大的質數作為「模數」,正常的雜湊累加出答案。注意最後是減法得到的答案才累加到ans裡面。

二分法

#include

#include

#include

#include

using

namespace std;

int n,c,a[

200000];

intmain()

sort

(a+1

,a+n+1)

;long

long ans=0;

for(

int i=

1;i<=n;i++

) cout

}

雜湊
#include

#include

#include

#include

#include

#define p 4000037

using

namespace std;

long

long a[p]

,b[200010

],c[p]

;long

long n,c,x,qm,ans;

long

long

hash

(long

long x)

long

longdw(

long

long x)

return

hash

(j+qm);}

intmain()

for(

int i=

1; i<=n; i++)

cout

}

洛谷 二分查詢 P1102 A B數對

題目描述 給出一串數以及乙個數字 c 要求計算出所有 a b c 的數對的個數。不同位置的數字一樣的數對算不同的數對 輸入格式 第一行包括 2 個非負整數 n 和 c 中間用空格隔開。第二行有 n 個整數,中間用空格隔開,作為要求處理的那串數。輸出格式 輸出一行,表示該串數中包含的所有滿足 a b ...

洛谷P1102 A B 數對

題目描述 出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入格式 輸入共兩行。第一行,兩個整...

P1102 A B 數對(二分)

p1102 a b 數對 出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。第一行,...