内存限制:256 MiB
时间限制:1000 ms
标准输入输出
题目类型:传统
评测方式:文本比较
题目描述
题目看多了也有审美疲劳,于是我舍弃了大家所熟悉的A+B Problem,改用A-B了哈哈!
好吧,题目是这样的:给出一串数以及一个数字C,要求计算出所有A-B=C的数对的个数。
(不同位置的数字一样的数对算不同的数对)
输入格式
第一行包括2个非负整数N和C,中间用空格隔开。 第二行有N个整数,中间用空格隔开,
作为要求处理的那串数。
输出格式
输出一行,表示该串数中包含的所有满足A-B=C的数对的个数。
样例
input
4 1
1 1 2 3
output
3
数据范围与提示
对于100%的数据,N <= 200000。
所有输入数据都在int范围内。
时间限制:1s
空间限制:256MB
链接: TYWZOJ
AC code:
#include<bits/stdc++.h>
using namespace std;
int a[200005],An[200005],Ak[200005];
int d(int n,int x) {
int l=1,h=n;
while(l<=h) {
int m=(l+h)/2;
if(An[m]==x) {
return m;
} else if(An[m]<x) {
l=m+1;
} else {
h=m-1;
}
}
return 0;
}
int main() {
int n,c,l=0,cnt=0;
scanf("%d%d",&n,&c);
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for(int i=1; i<=n; i++) {
if(a[i]==a[i-1]) {
Ak[l]++;
} else {
An[++l]=a[i],Ak[l]=1;
}
}
for(int i=1; i<=l; i++) {
int cxk=d(l,An[i]+c);
if(cxk) {
cnt+=Ak[cxk]*Ak[i];
}
}
printf("%d\n",cnt);
return 0;
}
趣味代码(只是改了变量名):
#include<bits/stdc++.h>
using namespace std;
int a[200005],sudfhasfjerykucaswefvbasjhftr4we[200005],seajgdfsbhfasyuefcsbfjwehgfr[200005];
int d(int n,int x) {
int l=1,ahsdhawgfdawegfyuawgfw=n;
while(l<=ahsdhawgfdawegfyuawgfw) {
int asdgadjbjaweghdkbsjfweukf=(l+ahsdhawgfdawegfyuawgfw)/2;
if(sudfhasfjerykucaswefvbasjhftr4we[asdgadjbjaweghdkbsjfweukf]==x) {
return asdgadjbjaweghdkbsjfweukf;
} else if(sudfhasfjerykucaswefvbasjhftr4we[asdgadjbjaweghdkbsjfweukf]<x) {
l=asdgadjbjaweghdkbsjfweukf+1;
} else {
ahsdhawgfdawegfyuawgfw=asdgadjbjaweghdkbsjfweukf-1;
}
}
return 0;
}
int main() {
int n,c,l=0,sdadfaoshdiurwefdsjhrfaweuif=0;
scanf("%d%d",&n,&c);
for(int i=1; i<=n; i++) {
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
for(int i=1; i<=n; i++) {
if(a[i]==a[i-1]) {
seajgdfsbhfasyuefcsbfjwehgfr[l]++;
} else {
sudfhasfjerykucaswefvbasjhftr4we[++l]=a[i],seajgdfsbhfasyuefcsbfjwehgfr[l]=1;
}
}
for(int i=1; i<=l; i++) {
int cxk=d(l,sudfhasfjerykucaswefvbasjhftr4we[i]+c);
if(cxk) {
sdadfaoshdiurwefdsjhrfaweuif+=seajgdfsbhfasyuefcsbfjwehgfr[cxk]*seajgdfsbhfasyuefcsbfjwehgfr[i];
}
}
printf("%d\n",sdadfaoshdiurwefdsjhrfaweuif);
return 0;
}