★★ 輸入文件:dec.in 輸出文件:dec.out 簡單對比 時間限制:1 s 記憶體限制:128 MB Description 出題是一件痛苦的事情! 題目看多了也有審美疲勞,於是我捨棄了大家所熟悉的A+B Problem,改用A-B了哈哈! 好吧,題目是這樣的:給出一串數以及一個數字C,要求計 ...
★★ 輸入文件:dec.in
輸出文件:dec.out
簡單對比
時間限制:1 s
記憶體限制:128 MB
Description
出題是一件痛苦的事情!
題目看多了也有審美疲勞,於是我捨棄了大家所熟悉的A+B Problem,改用A-B了哈哈!
好吧,題目是這樣的:給出一串數以及一個數字C,要求計算出所有A-B=C的數對的個數。
(不同位置的數字一樣的數對算不同的數對)
Input Format
第一行包括2個非負整數N和C,中間用空格隔開。
第二行有N個整數,中間用空格隔開,作為要求處理的那串數。
Output Format
輸出一行,表示該串數中包含的所有滿足A-B=C的數對的個數。
Sample Input
4 1
1 1 2 3
Sample Output
3
Data Limit
對於90%的數據,N <= 2000;
對於100%的數據,N <= 200000。
所有輸入數據都在longint範圍內。
‘
map大法好!!!
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<vector> 6 #include<map> 7 #define LL long long 8 using namespace std; 9 LL read(LL & n) 10 { 11 int flag=0,x=0;char c='/'; 12 while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;} 13 while(c>='0'&&c<='9')x=x*10+(c-48),c=getchar(); 14 if(flag)n=-x; 15 else n=x; 16 } 17 LL n,c,p,ans=0,a[200001]; 18 map<LL,int>mp; 19 int main() 20 { 21 freopen("dec.in","r",stdin); 22 freopen("dec.out","w",stdout); 23 read(n);read(c); 24 for(int i=1;i<=n;i++) 25 read(a[i]),mp[a[i]]++; 26 for(int i=1;i<=n;i++) 27 {LL now=a[i]-c;ans=ans+mp[now];} 28 cout<<ans; 29 return 0; 30 }