记录编号 |
73696 |
评测结果 |
AAAAAAAAAA |
题目名称 |
数对的个数 |
最终得分 |
100 |
用户昵称 |
GDFRWMY |
是否通过 |
通过 |
代码语言 |
Pascal |
运行时间 |
0.060 s |
提交时间 |
2013-10-22 16:57:15 |
内存使用 |
0.93 MiB |
显示代码纯文本
var
a,b,c,d,e,f,i,j,m,n,sum1,sum2,z,u:longint;
ans:int64;
k:array[0..200000]of longint;
procedure sort(l,r: longint);
var
i,j,x,y: longint;
begin
i:=l;
j:=r;
x:=k[(l+r) div 2];
repeat
while k[i]<x do
inc(i);
while x<k[j] do
dec(j);
if not(i>j) then
begin
y:=k[i];
k[i]:=k[j];
k[j]:=y;
inc(i);
j:=j-1;
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end;
begin
assign(input,'dec.in');
assign(output,'dec.out');
reset(input);
rewrite(output);
readln(n,c);
for a:=1 to n do
read(k[a]);
sort(1,n);
k[0]:=-1;
u:=1;
z:=1;
while u<=n do
begin
sum1:=0;
sum2:=0;
a:=z;
if k[n]-k[a]<c then break;
if k[u]-k[z]=c then
begin
for b:=a to n do
if k[a]=k[b] then
inc(sum1) else
if sum1<>0 then begin z:=b; break; end;
for b:=u to n do
if k[a]=k[b]-c then
inc(sum2) else
if sum2<>0 then begin u:=b; break; end;
ans:=ans+sum1*sum2;
continue;
end;
if k[u]-k[z]<c then
begin
inc(u);
continue;
end;
if k[u]-k[z]>c then
begin
inc(z);
continue;
end;
end;
writeln(ans);
close(input);
close(output);
end.