100 - Phone
250 - Death by Taxes
1 #!/usr/bin/perl -w 2 use v5.14; 3 4 my @taxes = (10, 15, 25, 28, 33, 35, 39.6); 5 6 my %types; # Hash de la tipuri de persoane la punctele unde se schimba taxa 7 # Daca valoarea e mai mica decat $types{$type}[$i], taxa e $taxes[$i] / 100. 8 $types{Single} = [9075, 36900, 89350, 186350, 405100, 406750, 500000]; 9 $types{'Married joint filer'} = [18150, 73800, 148850, 226850, 405100, 457600, 500000]; 10 $types{'Head of household'} = [12950, 49400, 127550, 206600, 405100, 432200, 500000]; 11 $types{'Married filing separately'} = [9075, 36900, 74425, 113425, 202550, 228800, 500000]; 12 $types{'Surviving spouse'} = $types{'Married joint filer'}; 13 14 my ($type, $amount) = <>; # Citim tipul de persoana si valoarea taxabila 15 chomp $type; # Stergem newline-ul din $type 16 17 for my $i (0 .. $#taxes) { # Luam pe rand tax bracket-urile 18 if ($types{$type}[$i] > $amount) { # Daca valoarea se incadreaza in acest bracket... 19 say int ($amount * $taxes[$i] / 100); # ... scriem raspunsul 20 exit # ... si ne oprim 21 } 22 }
500 - Last Vector Standing
Problema a fost propusa in ideea de a fi o buna tema de gandire pentru participanti. Pe de o parte ea avea o solutie destul de simpla ca idee, folosind un algoritm de cuplaj in graf bipartit (care trebuia sa aiba o complexitate cel putin la fel de buna ca Algoritmul Hopcroft-Karp, in cazul limitelor din problema). Pe de alta parte, s-a lasat ca tema concurentilor gasirea unui algoritm de tip greedy corect la aceasta problema.
Solutia folosind cuplaj s-a bazat pe urmatoarea idee: Fiecare numar x
are M
stari: starea x
, starea x-b[1]
, x-b[2]
, â¦, x-b[m]
. Dupa o normalizare (cel mai usor se implementa cu un std::map
), cuplajul se realiza intre multimea elementelor initiale si multimea elementelor finale, unde elementele finale se comprima, elementele duble fiind eliminate. Asteptam explicatia oricarei solutii greedy corecte (demonstrabil, sau macar intuitiv) pe facebook.
900 - Palarb
1 -> x
, respectiv x -> 1
(unde x
este nodul curent din parcurgere), daca acestea corespund, probabilitatea ca cele siruri sa difere este foarte mica, mai ales daca nu calculam o singura valoare hash, 2 sau chiar 3 valori hash diferite. Implementarea efectiva o lasam ca tema cititorilor.