Bạn nào giải giúp mình bài này với!!
Cho một mảng N số nguyên dương, nhiệm vụ của bạn là đếm số lượng dãy con lien tiếp có tổng bằng X.Dữ liệu vào: File xsum1.inp gồm:
+ Dòng 1: ghi hai số nguyên N và X kích thước của dãy và tổng mục tiêu X.+ Dòng 2: Ghi N số nguyên a1,a2, … ,aN là các phần tử của dãy.
Dữ liệu ra: File xsum1.out gồm duy nhất một số là số lượng dãy con có tổng bằng x.Ràng buộc
1≤ n ≤ 2 ⋅105
1≤ x,ai ≤109
Ví dụ
Xsum1.inp | Xsum1.out |
5 72 4 1 2 7 | 3 |
const fi='xsum1.inp'
fo='xsum1.out'
var f1,f2:text;
a:array[1..20000]of integer;
i,n,j,x,dem,k,m,t:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n,x);
for i:=1 to n do
read(f1,a[i]);
dem:=0;
for i:=1 to n do
for j:=1 to n do
begin
for k:=1 to n do
if (i<j) and (j<k) then
begin
t:=0;
for m:=i to k do
t:=t+a[m];
if t=x then inc(dem);
end;
end;
for i:=1 to n do
if x=a[i] then inc(dem);
writeln(f2,dem);
close(f1);
close(f2);
end.
program COST;
var n,m,s,dem:int64;a:
array[1..1000000] of int64;
i,j:longint;
begin
readln(n,m);
for i := 1 to n do read(a[i]);
dem := 0;
for i := 1 to n do
begin
s := 0;
for j := i to n do
begin
s := s+a[j];
if s <= m then
begin
inc(dem);
continue;
end
else if a[j] > m then break;
end;
end;
write(dem);
end.