Тема: Чому не ідуть всі тести? Допоможіть!
Ось у мова і мій код.
Подiл котiв
Обмеження: 1 сек., 256 МiБ
Зеник та Марiчка недавно купили в Ашанi n нових котiв. Вiдомо, що i-й кiт важить ai кiлограм.
Тепер нашi георї хочуть роздiлити цих котiв мiж собою. Основним для них є те, щоб витрати
на цих котiв були розподiленi однаково мiж друзями. Оскiльки витрати на кота пропорцiйнi його
вазi, вони хочуть роздiлити котiв так, щоб сумарна вага Зеникових котiв була рiвною сумарнiй
вазi котiв Марiчки.
Ваше завдання допомогти їм знайти шуканий подiл.
Вхiднi данi
У першому рядку задано одне цiле число n кiлькiсть котiв. У другому рядку задано n цiлих чисел ai, роздiлених пробiлами ваги вiдповiдних котiв. Коти пронумерованi цiлими числами вiд 1 до n включно.
Вихiднi данi:
Якщо правильно роздiлити котiв неможливо, виведiть одне число
-1. Iнакше, у першому рядку виведiть число k кiлькiсть котiв, якi отримає Зеник. У другому
рядку виведiть послiдовнiсть iз k цiлих чисел iндекси Зеникових котiв. Всi iншi коти отримає
Марiчка. Якщо iснує декiлька правильних розподiлiв, дозволяється вивести будь-який з них.
Обмеження:
1<=n<=200;
1<=ai<=4
Приклад:
Вхідні дані: Вихідні дані:
5 3
4 1 4 3 4 1 2 4
Ось код:
var
n, k, i, s, ostacha, polovina: integer;
a: array[1..200] of integer;
index: array[1..200] of integer;
begin
s := 0;
readln(n);
for i := 1 to n do
begin
read(a[i]);
s := s + a[i];
end;
ostacha := s mod 2;
s := s div 2;
polovina := a[1];
k := 1;
index[k] := 1;
i := 1;
if ostacha = 0 then
while (polovina <> s) and (i <= n) do
begin
i := i + 1;
polovina := polovina + a[i];
if polovina <= s then begin k := k + 1; index[k] := i; end;
if polovina > s then polovina := polovina - a[i];
end;
if (ostacha <> 0) or (polovina < s) then write(-1) else begin
writeln(k);
for i := 1 to k do write(index[i], ' ');
end;
end.