出題是一件痛苦的事情!
相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a+b problem,改用 a-b 了哈哈!
好吧,題目是這樣的:給出一串數以及乙個數字 cc,要求計算出所有 a - b = ca−b=c 的數對的個數(不同位置的數字一樣的數對算不同的數對)。
輸入共兩行。
第一行,兩個整數 n, cn,c。
第二行,nn 個整數,作為要求處理的那串數。
一行,表示該串數中包含的滿足 a - b = ca−b=c 的數對的個數。
輸入 #1
輸出 #1411
123
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 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。第一行,...