Pagini recente » Cod sursa (job #2834378) | Cod sursa (job #684031) | Cod sursa (job #229644) | Cod sursa (job #1406355) | Cod sursa (job #72736)
Cod sursa(job #72736)
//infoarena divk
const max = 500000;
type plist = ^tlist;
tlist = record
x:longint;
next:plist;
end;
rr = record
head,last:plist;
end;
var a: array[1..max] of longint;
s: array[0..max] of int64;
v: array[0..100000] of rr;
n,aa,bb,k,rez:longint;
f:text;
c:char;
procedure add(lista,i:longint);
var p:plist;
begin
new(p); p^.x:=i; p^.next:=nil;
if v[lista].head = nil then
v[lista].head:=p
else v[lista].last^.next:=p;
v[lista].last:=p;
end;
function getnn:longint;
var rez:longint;
neg: boolean;
begin
rez:=0; neg:=false;
if c = '-' then begin neg:=true; read(f,c); end;
while ((ord(c) >=48) and (ord(c) <= 57)) do
begin
rez:=rez*10 + ord(c) - 48;
read(f,c);
end;
if neg then rez:=-rez;
getnn:=rez;
while (((ord(c) < 48) or ( ord(c) > 57))) and ( ord(c) <> 26) and ( c <> '-') do
read(f,c);
end;
procedure citire;
var i:longint;
buf : array[1..65535] of byte;
begin
assign(f,'divk.in'); reset(f); settextbuf(f,buf);
readln(f,n,k,aa,bb);
add(0,0);
for i:=1 to n do
begin
//readln(a[i]);
a[i] :=getnn;
s[i]:=s[i-1]+a[i];
add(s[i] mod k,i);
end;
close(input);
end;
procedure calc;
var i,nr:longint;
p1,p2:plist;
begin
for i:=0 to k-1 do
begin
nr:=0;
p1:=v[i].head;
while p1 <> nil do
begin
p2:=p1^.next;
nr:=0;
while (p2 <> nil ) and (p2^.x-p1^.x <=bb) do
begin
if (p2^.x-p1^.x >=aa ) then
inc(nr);
p2:=p2^.next;
end;
rez:=rez+nr;
p1:=p1^.next;
end;
end;
end;
{function calc ( lung : longint ) : int64;
var p1,p2 : plist;
nr,dif, rez: int64;
i:longint;
begin
rez:=0;
for i:=0 to k-1 do
begin
nr:=0;
p1 := v[i].head;
if p1 = nil then continue;
p2 := p1^.next;
dif := 0;
while ( p2 <> nil ) do
begin
while (p2 <> nil) and (p2^.x - p1^.x +1 <=lung ) do
begin
inc(dif);
nr:=nr+dif;
p2:=p2^.next;
end;
p1:=p1^.next;
dif:=dif-1;
end;
rez:=rez+nr;
end;
calc:=rez;
end;}
begin
citire;
calc;
assign(output,'divk.out'); rewrite(output);
//writeln(calc(bb)-calc(aa-1));
writeln(rez);
close(output);
end.