Mam takie zadanie:
Zadaniem programu jest wczytanie liczb całkowitych, a następnie znalezienie wśród nich trójek liczb sumujących się do zera, liczby są niepowtarzalne, dopuszczamy tylko jedną ich kombinację.
Bardzo prostym przykładem może być:
a: -1
b -3
c: 4
d: 3
e: -2
f: 1daje odpowiedź 2, bo:
b + a + c = 0
e + a + d = 0Charakterystyka wejścia:
t – liczba testów (do 5)
n – ilość liczb (do 10000)… - kolejne liczby
Wyjście:
k – liczba trójek sumujących się do zera (do 1000)
a b c – trójki liczb (oddzielone spacjami) sumujące się do zera w rosnącej kolejności (kolejność rosnąca trójek i kolejność rosnąca w trójkach)
Uwaga: żeby nie przepełnić strumienia wejścia trójki liczb wyświetlamy jedynie dla k < 100, w innym wypadku wyświetlamy samo k.np.:
Wejście:
1
10
-4
3
-2
1
6
7
-1
-5
-3
2Wyjście:
8
-5 -2 7
-5 -1 6
-5 2 3
-4 -3 7
-4 -2 6
-4 1 3
-3 1 2
-2 -1 3
Napisałem algorytm ale jest za wolny, bo jest to niemalże brute-force, więc nic dziwnego. W jaki sposób można to zrobić szybciej? Szukam algorytmów z tym związanych ale nie mogę nic znaleźć.
Dzięki za wszelką pomoc.