題目描述
出題是一件痛苦的事情!
相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a+b problem,改用 a-b 了哈哈!
好吧,題目是這樣的:給出一串數以及乙個數字 c,要求計算出所有 a−b=c 的數對的個數(不同位置的數字一樣的數對算不同的數對)。
輸入格式
輸入共兩行。
第一行,兩個整數 n,c。
第二行,n 個整數,作為要求處理的那串數。
輸出格式
一行,表示該串數中包含的滿足 a−b=c 的數對的個數。
思路:題目要表達的意思就是一堆數中尋找所有滿足任意乙個數減去c要正好等於另外乙個數的這樣乙個數對的個數。最簡單常規的思路就是兩個迴圈列舉一下,尋找滿足式子a[i]+c=a[j]的有多少。然而這樣暴力地列舉時間複雜度會很大,o(n2)。資料的範圍很大,肯定會有部分例子會tle的。
列舉**:
#include
#include
using
namespace std;
int a[
200001];
intmain()
sort
(a+1
,a+n+1)
;for
(i=1
;i} cout
}
改進:然後如果不用寫很多二分或樹結構的**,就想到了用stl裡的map直接對映,即把這n個數存在陣列和乙個map中,然後乙個迴圈中sum+=+a[b[i]],便能累加出答案。
map對映
#include
#include
#include
using
namespace std;
map <
long
long
int,
long
long
int>a;
long
long
int b[
200001];
intmain()
sort
(b+1
,b+n+1)
;for
(i=1
;i<=n;i++
)for
(i=1
;i<=n;i++
) cout
}
輸入輸出樣例
樣例輸入#1
411
123
樣例輸出#1
3
洛谷1102 A B數對
給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 對於 75 的資料,1 n 2000 1 leq n leq 2000 1 n 20 00對於 100 的資料,1 n 2 1 05 1 leq n leq 2 times 10 5 1 n ...
洛谷P1102 A B 數對
題目描述 出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入格式 輸入共兩行。第一行,兩個整...
洛谷 P1102 A B 數對 題解
鏈結 出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c cc,要求計算出所有 a b c a b c a b c的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。...