【洛谷 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 imes 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;
}
原文地址:https://www.cnblogs.com/wuhu-JJJ/p/14075588.html