Un approccio alterantivo puo' essere il seguente : osservando che la condizione è soddisfatta se un elemento è pari alla somma di tutti gli altri nella sottosequenza , ne discende che la somma degli elementi della sottosequenza è il doppio di quell'elemento . Per cui , detto max il maggiore di tutti gli elementi e somma la somma della sottosequenza deve risultare verificata la condizione somma=2*max , e quindi l'algoritmo risultante sarà il seguente :
codice:
var
a[n]:array of integer ;
b[blocchi] : array of boolean;
i,j,k,l,m,n,blocchi,max,somma: integer;
begin
blocchi:=n/k;
for i:=0 to blocchi-1 do
begin
l:=i*k;
m:=l+k;
max=a[l];
somma:=0;
{calcola la somma e il max di ogni blocco}
for j:=l to m do
begin
somma:=somma+a[j];
if max>a[j] then max:=a[j];
end;
{verifica se la somma è il doppio del max}
if somma=2*max then
b[i]:=TRUE
else
b[j]:=FALSE;
end;
end.