洛谷 二分查詢 P1102 A B數對

2022-05-26 23:15:11 字數 881 閱讀 1405

【題目描述:】

給出一串數以及乙個數字 c ,要求計算出所有 a−b=c 的數對的個數。(不同位置的數字一樣的數對算不同的數對)

【輸入格式:】

第一行包括 2 個非負整數 n 和 c ,中間用空格隔開。

第二行有 n 個整數,中間用空格隔開,作為要求處理的那串數。

【輸出格式:】

輸出一行,表示該串數中包含的所有滿足 a−b=c 的數對的個數。

對於前73%的資料,可以直接\(o(n^2)\)列舉

對於100%的資料,可以用二分優化到\(o(nlog_2n)\)

對於乙個集合a,a∈a,b∈a

求 a-b=c 的數對的個數,就是滿足求出a=b+c的數對個數

先把資料從小到大排序,

列舉集合中的每乙個元素b,二分找出第乙個等於b+c的元素的位置pos1和第乙個大於b+c元素的位置pos2

則[pos1, pos2-1]區間內的每乙個元素都能與b構成乙個數對

對於此時的b來說,能與其構成數對的方案數為pos2-pos1。

#include#include#include#define re register

using namespace std;

typedef long long ll;

const int maxn = 200000 + 1;

int n, c, a[maxn];

ll ans;

inline int abs(int x)

//炒雞快讀

inline char gc()

inline int read()

int main()

printf("%lld\n", ans);

}

洛谷P1102 A B數對 二分 雜湊

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

P1102 A B 數對(二分查詢)

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

P1102 A B 數對 二分查詢

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