Izgubljeni niz

View as PDF

Submit solution


Points: 1
Time limit: 1.0s
Memory limit: 64M

Problem type

Profesor Feđa, strastveni ribolovac i obožavalac ronjenja na dah, pronašao je svoj 14. omiljeni hobi - zaboravljanje nizova. Ova novootkrivena disciplina teče na sledeći način:

Na početku, Feđa zamisli niz A sa N prirodnih brojeva. Nakon toga on na papiru zapiše niz B sa tačno \frac{N (N+1)}{2} brojeva. Članovi niza B su dobijeni primenom bitovne operacije \ \text{or} \ (videti napomenu) na sve parove brojeva iz niza A, preciznije:

Za svaki uređeni par indeksa (i, j), (1 \leq i \leq j \leq N) iz niza A u nizu B je zapisana vrednost A_i \ \text{or} \  A_j. Ako je neka vrednost ista za više parova, ona se u nizu B pojaljuje tačno onoliko puta koliko ima parova sa tom vrednošću. Ove vrednosti se u nizu B mogu javiti u proizvoljnom redosledu.

Naravno, profesor se umorio nakon zapisivanja svih ovih brojeva i u potpunosti zaboravio prvobitno zamišljeni niz A. Srećom na papiru mu je ostao zapisan niz B. Da li možete da pomognete našem dragom profesoru i pronađete izgubljeni niz A?

Opis ulaza

U prvoj liniji standardnog ulaza nalazi se jedan prirodan broj N, dužina izgubljenog niza A. U drugoj liniji standardnog ulaza nalazi se \frac{N (N+1)}{2} prirodnih brojeva, elementi niza B opisanog u tekstu zadatka.

Opis izlaza

U jedinoj liniji standardnog izlaza ispisati N prirodnih brojeva, elemente izgubljenog niza A. Garantuje se da su ulazni podaci takvi da postoji bar jedan odgovarajući niz. Ako postoje više mogućih nizova, ispisati bilo koje rešenje.

Primer 1

Ulaz
3
5 4 2 3 1 6
Izlaz
1 4 2
Objašnjenje primera

Izgubljeni niz A ima N=3 člana i treba ga pronaći koristeći niz B=[5, 4, 2, 3, 1, 6]. Jedan od mogućih nizova je A = [1, 4, 2]. Ako primenimo bitovnu operaciju or na sve parove brojeva u nizu A dobijamo:

  • A_1 \ \text{or} \ A_2 = 5 = B_1
  • A_2 \ \text{or} \  A_2 = 4 = B_2
  • A_3 \ \text{or} \  A_3 = 2 = B_3
  • A_1 \ \text{or} \  A_3 = 3 = B_4
  • A_1 \ \text{or} \ A_1 = 1 = B_5
  • A_2 \ \text{or} \  A_3 = 6 = B_6
Ograničenja

U svim test primerima važe ograničenja

  • 1 \leq N \leq 1268
  • 1 \leq B_i < 2^{20}

Test primeri su podeljeni u 3 disjunktne grupe:

  • U test primerima vrednim 20 poena važe ograničenja 1 \leq N \leq 7 i 1 \leq B_i \leq 7 .
  • U test primerima vrednim 40 poena važi ograničenje 1 \leq N \leq 91.
  • U test primerima vrednim 40 poena nema dodatnih ograničenja.

Napomena

Operator disjunkcije u Pascal-u je označen sa or, dok u C++ ga zapisujemo pomoću simbola |. Ova operacija x\ \text{or} \ y se za nenegativne cele brojeve x,y definiše na sledeći način. Prvo se brojevi zapišu u binarnom zapisu. Ukoliko jedan broj ima manje cifara od drugog, dopisuju mu se vodeće nule sve dok ne budu imali isti broj binarnih cifara. Tako se dobijaju dva niza binarnih cifara, označimo ih sa a_1, \ldots, a_k i b_1, \ldots b_k. Zatim se za svaku poziciju i \in \{1, \ldots, k \} računa c_i pomoću sledećih pravila:

  • Za a_i = 0, b_i = 0 važi  c_i = 0
  • Za a_i = 0, b_i = 1 važi  c_i = 1
  • Za a_i = 1, b_i = 0 važi  c_i = 1
  • Za a_i = 1, b_i = 1 važi  c_i = 1

Niz binarnih cifara c_1, \ldots, c_k (koji možda ima vodeće nule) je binarni zapis rezultata, odnosno broja x \ \text{or} \  y.


Comments

There are no comments at the moment.