记录编号 |
77457 |
评测结果 |
AAAAAAAAAAA |
题目名称 |
数对的个数 |
最终得分 |
100 |
用户昵称 |
STARGAZER |
是否通过 |
通过 |
代码语言 |
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;
}