Rozważmy trzy zestawy A
, B
a C
każda zawiera n
liczby całkowite. Z tego możemy zrobić zestaw
S_n = {a * b + c | a in A, b in B, c in C}.
Biorąc pod uwagę n
, istnieje jeden lub więcej minimalnych rozmiarów, S_n
które zależą od tego, które zestawy A,B and C
zostały wybrane.
Zestawy mogą zawierać dowolne n
odrębne liczby całkowite (dodatnie, zerowe lub ujemne). Nie ma potrzeby, aby były to kolejne liczby całkowite lub żeby zestawy były sobie równe, na przykład. A = {-1, 0, 5, 10, 27}, B = {2, 5, 6, 10, 14} and C = {-23, 2, 100, 1000,10000}
jest na przykład do przyjęcia (choć nie jest to dobry pomysł).
Zadanie
Zadaniem jest napisanie kodu w celu znalezienia najmniejszego zestawu, S_n
jaki może dla każdego n
od 1
do 20
.
Dla każdego n
z 1
do 20
kodu powinna wyjście wybrana A
, B
a C
wraz z wynikającym z wielkościS_n
Wynik
Twój wynik będzie sumą rozmiarów stworzonych przez S_n
Ciebie. To będzie suma dwudziestu liczb.
Im niższy wynik, tym lepiej.
Przykłady
Jeśli A = B = C = {1, 2, 3, 4}
to, S_4 = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
które jest wielkości 19
.
Nie jest to jednak w żaden sposób optymalne. Na przykład A = B = C = {-1, 0, 1, 2}
daje, S_4 = {0, 1, 2, 3, 4, 5, 6, -1, -3, -2}
który ma rozmiar 10
.
Czasy
Ponieważ będę musiał uruchomić kod, aby zweryfikować dane wyjściowe, upewnij się, że nie zajmuje to więcej niż 30 minut i 4 GB pamięci RAM, aby uruchomić się na normalnym pulpicie.
Notatki
Twój kod musi faktycznie obliczyć dane wyjściowe. Nie możesz zakodować w swoim kodzie wstępnie obliczonych odpowiedzi.
źródło
Odpowiedzi:
Rdza, wynik
14121411src/main.rs
Cargo.toml
Skompiluj i uruchom z
cargo run --release
.Wynik
Na moim laptopie zajęło to około 8 minut i około 1,5 GiB pamięci.
Jak to działa
Zakładamy (bez szczególnego powodu), które i B są oczywiste szereg kolejnych liczb wyśrodkowany 0 lub pół, a następnie wykonać A * do optymalnego C danego i B .
źródło
B
iC
czy możesz wykonać to samo wyszukiwanie A *A
? Mam na myśli rodzaj podejścia do zejścia ze współrzędnymi. Napraw wszystkie zestawy oprócz jednego, zoptymalizuj ostatni i powtórz.A = B
i obie kolejne liczby całkowite są naprawdę zawsze optymalne. Tylko jeden licznik byłby ekscytujący.Aksjomat, wynik 1466
Zbiory byłyby A = B = [- n / 2..n / 2], jeśli n% 2 == 0 w innym przypadku A = B = [- n / 2 .. ((n / 2) +1)]
Zbiór C jest sumą tablicy jako [-2, -1, .. (n-2)] do jednej tablicy arr [] tego rodzaju [0,0,0,0,0] lub [0,1 , 1,1,2] lub [0,0,0,0,3], aby tablica miała właściwość
Jeśli chcesz być bardziej precyzyjny lub komputer działa szybciej, możesz spróbować zwiększyć „3” w „inc (aix, 3)”, które zwiększą liczbę tablic dla wariantu zestawu C, a więc zwiększy to dokładność wyniku.
W wynikach drukowany jest łańcuch
gdzie B = A i | S | to liczba elementów S
źródło
SQL Server, 1495
Rozwiązanie można zweryfikować tutaj .
Przepraszam, ponieważ dane wyjściowe mają formę tabelaryczną.
źródło
C, wynik
14481431Byłby to ten sam +/- algo implementacji Axiom
wyniki
źródło
Python 2 , wynik 1495
Wypróbuj online!
Prosta linia bazowa polegająca na tym, że każdy zestaw jest przedziałem długości n wyśrodkowanym wokół 0, nieco niezrównoważonym dla parzystego n. TIO ma kod Python do obliczania wyniku.
Rozmiar dotyczy
(n*n+1)/2
nieparzystego n, a(n*n+n)/2
nawet parzystego n.źródło
Mathematica, wynik 1495
źródło
C ++, wynik 1411
Domysł A i B to kolejne liczby całkowite wyśrodkowane w pobliżu 0, wystarczy użyć symulowanego wyżarzania, aby znaleźć C.
Źródło:
Wyniki:
Z opcją -O2 na moim komputerze, obliczenie wszystkich wyników zajmuje 50 sekund.
źródło