1. 程式人生 > 實用技巧 >【洛谷 1102】A-B數對

【洛谷 1102】A-B數對

題目描述

出題是一件痛苦的事情!

相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

好吧,題目是這樣的:給出一串數以及一個數字 CCC,要求計算出所有 A−B=CA - B = CAB=C 的數對的個數(不同位置的數字一樣的數對算不同的數對)。

輸入格式

輸入共兩行。

第一行,兩個整數 N,CN, CN,C。

第二行,NNN 個整數,作為要求處理的那串數。

輸出格式

一行,表示該串數中包含的滿足 A−B=CA - B = CAB=C 的數對的個數。

輸入輸出樣例

輸入 #1
4 1
1 1 2 3
輸出 #1
3

說明/提示

對於 75%75\%75% 的資料,1≤N≤20001 \leq N \leq 20001N2000。

對於 100%100\%100% 的資料,1≤N≤2×1051 \leq N \leq 2 \times 10^51N2×105。

保證所有輸入資料都在 323232 位帶符號整數範圍內。

2017/4/29 新添資料兩組

題解:map練習題

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include
<algorithm> #include<bits/stdc++.h> typedef long long ll; using namespace std; const int N=200002; int n; ll a[N],c,ans; map<ll,ll>mddd; int main(){ // freopen("1102.in","r",stdin); // freopen("1102.out","w",stdout); scanf("%d %lld",&n,&c); for(int i=1;i<=n;i++){ scanf(
"%lld",&a[i]); mddd[a[i]]++; a[i]-=c; } for(int i=1;i<=n;i++) ans+=mddd[a[i]]; cout<<ans; return 0; }