Một trò chơi dành cho nhiều đội chơi được Ban tổ chức quy định như sau: bắt đầu cuộc chơi, Ban tổ chức cho chạy N số trên màn hình từ trái sang phải và yêu cầu đội chơi nào trả lời nhanh nhất số cách chia dãy số trên thành nhiều dãy con nhất sao cho các dãy con có tổng bằng nhau.
Ví dụ: Trên màn hình chạy dòng 19 số: 1 0 2 0 0 3 1 1 1 0 2 1 0 0 2 1 2 0 1. Kết quả trả lời đúng là: tổng các số mỗi dãy con là 3, số dãy con nhiều nhất là 6, bao gồm các dãy con là: 1 0 2, 0 0 3, 1 1 1, 0 2 1, 0 0 2 1, 2 0 1
+Dữ liệu vào: File văn bản GAMESHOW.INP
- Dòng 1 chứa số nguyên dương N.
- Dòng 2 chứa N số chạy trên màn hình, các số cách nhau bởi dấu cách.
+ Dữ liệu ra: Ghi ra file văn bản GAMESHOW.OUT
- Dòng 1 là tổng các số của một dãy con.
- Dòng 2 là số K (số dãy con nhiều nhất chia được).
- Dòng 3 là các vị trí cuối cùng của từng dãy con, các số vị trí này cách nhau bởi dấu cách.
Ví dụ:
GAMESHOW.INP |
GAMESHOW.OUT |
19 1 0 2 0 0 3 1 1 1 0 2 1 0 0 2 1 2 0 1 |
3 6 3 6 9 12 16 19 |
const fi='gameshow.inp';
fo='gameshow.out';
var f1,f2:text;
a,b:array[1..100]of integer;
n,i,tg,d,s,x,j,vtd,vt:integer;
begin
assign(f1,fi); reset(f1);
assign(f2,fo); rewrite(f2);
readln(f1,n);
for i:=1 to n do
read(f1,a[i]);
{----------------------xu-ly------------------}
tg:=0;
for i:=1 to n do
tg:=tg+a[i];
for i:=n downto 1 do
if tg mod i=0 then
begin
d:=0;
s:=0;
x:=tg div i;
for j:=1 to n do
begin
s:=s+a[j];
if s=x then
begin
vt:=j;
inc(d);
b[d]:=vt;
s:=0;
end;
end;
if s=0 then
begin
b[d]:=n;
break;
end;
end;
writeln(f2,x);
writeln(f2,d);
for i:=1 to d do
write(f2,b[i],' ');
close(f1);
close(f2);
end.