【題目描述:】
給出一串數以及乙個數字 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。第二行,...