P1102 A-B数对

题目描述

出题是一件痛苦的事情!
相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!
好吧,题目是这样的:给出一串数以及一个数字 C C C,要求计算出所有 A − B = C A - B = C AB=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

输入格式

输入共两行。
第一行,两个整数 N , C N, C N,C
第二行, N N N 个整数,作为要求处理的那串数。

输出格式

一行,表示该串数中包含的满足 A − B = C A - B = C AB=C 的数对的个数。

思路

hash就可以了
A-B=C->A+C=B
code:

#include<cstdio>
#include<queue>
#include<iostream>
#include<algorithm>
#define myd 1000007
using namespace std;
long long a[myd][2],tot;
long long n,m,s,ans;
inline long long ip()
{
 char c=getchar();
 long long ans=0;
 while (!isdigit(c)) c=getchar();
 while (isdigit(c)) ans=ans*10+c-48,c=getchar();
    return ans;
}
long long f(long long x)
{
 long long o=x;
 o%=myd;
 long long i=0;
 while (i<myd&&a[(o+i)][0]!=x&&a[(o+i)%myd][0]) i++;
 return (o+i)%myd;
}
bool find(long long x)
{
 return a[f(x)][0]==x;
}
void cr(long long x)
{
 a[f(x)][0]=x;
 a[f(x)][1]++;
 return;
}
long long x,i,c;
int main()
{
 n=ip(),c=ip();
 for (i=1;i<=n;i++)
 {
  x=ip();
  cr(x);
 }
 for (i=0;i<myd;i++)
 {
  s+=a[i][1]*a[f(a[i][0]+c)][1];
 }
 cout<<s;
 return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值