A B 數對 map對映(洛谷)

2021-10-10 08:11:30 字數 1509 閱讀 1323

題目描述

出題是一件痛苦的事情!

相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 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的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。...