记录编号 77457 评测结果 AAAAAAAAAAA
题目名称 数对的个数 最终得分 100
用户昵称 GravatarSTARGAZER 是否通过 通过
代码语言 C++ 运行时间 0.196 s
提交时间 2013-11-01 21:41:27 内存使用 1.71 MiB
显示代码纯文本
/*
610. 数对的个数
☆ 输入文件: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范围内。
*/
#include<fstream>
#include<map>
using namespace std;
map<int,int> que;
int main()
{
    ifstream fin("dec.in");
    ofstream fout("dec.out");
    long long int n,i,c,a,m[200000]={},nu=0,num=0;
    fin>>n>>c;
    for(i=0;i<n;i++)
    {
        fin>>a;
        if(que.find(a)==que.end())
		{
			que[a]=1;
			m[nu++]=a;
		}
		else
			que[a]++;
    }
    for(i=0;i<nu;i++)
    {
		a=m[i];
        if(que.find(a+c)!=que.end())
			num+=que[a]*que[a+c];
    }
	fout<<num<<endl;
    fin.close();
    fout.close();
    return 0;
}