luogu P1102 A-B数对

来源:互联网 发布:python 驼峰 编辑:程序博客网 时间:2024/05/16 06:58

题目描述
给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。(不同位置的数字一样的数对算不同的数对)

输入输出格式

输入格式:
第一行包括2个非负整数N和C,中间用空格隔开。

第二行有N个整数,中间用空格隔开,作为要求处理的那串数。

输出格式:
输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。

说明
对于73%的数据,N <= 2000;
对于100%的数据,N <= 200000。
所有输入数据都在longint范围内。


不太想解释,O(n^2)肯定过不了,用map就好了,cnt不开longlong会gg

#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <map>using namespace std;int n,c;long long cnt;int num[300005];map<long long,int> s;int main(){    cin>>n>>c;    for(int i=1;i<=n;i++) cin>>num[i],s[num[i]]++;    for(int i=1;i<=n;i++){        if(s[num[i]-c]) cnt+=s[num[i]-c];    }    cout<<cnt;    return 0;}

就是这样

原创粉丝点击