1 - Tri tajna broja
Vremensko ograničenje | Memorijsko ograničenje |
---|---|
1000ms | 64MB |
Komisija je krišom odabrala tri tajna nenegativna cela broja \(X\), \(Y\) i \(Z\), tako da \(0 \leq X \leq Y \leq Z\).
Da bi sprečila takmičare da se dokopaju ovih tajnih brojeva, Komisija će uz njih takmičarima saopštiti i vrednosti \(X+Y\), \(X+Z\), \(Y+Z\) i \(X+Y+Z\). Dakle, Komisija će takmičarima dati sedam vrednosti \(X\), \(Y\), \(Z\), \(X+Y\), \(X+Z\), \(Y+Z\) i \(X+Y+Z\) u nekom redosledu.
Pronađite \(X\), \(Y\) i \(Z\).
Opis ulaza
U prvom i jedinom redu standardnog ulaza, nalazi se sedam celih brojeva \(X\), \(Y\), \(Z\), \(X+Y\), \(X+Z\), \(Y+Z\) i \(X+Y+Z\) u nekom proizvoljnom redosledu (tj. prvi broj iz standardnog ulaza ne mora da bude jedank \(X\)).
Opis izlaza
U prvom i jedinom redu standardnog izlaza, ispisati \(X\), \(Y\) i \(Z\). Primetite da važi \(0 \leq X \leq Y \leq Z\).
Primer 1
Ulaz
Izlaz
Objašnjenje
Na ulazu su redom dati brojevi \(X + Z = 12\), \(X + Y = 8\), \(Y = 5\), \(X + Y + Z = 17\), \(Z = 9\), \(X = 3\), \(Y + Z = 14\)
Ograničenja
- \(0 \leq X \leq Y \leq Z \leq 10^8\)
Test primeri su podeljeni u četiri disjunktne grupe:
- U testovima vrednim 25 poena: \(0 = X = Y < Z\).
- U testovima vrednim 25 poena: \(0 \leq X \leq Y \leq Z < 100\).
- U testovima vrednim 25 poena: Brojevi iz ulaza su dati u neopadajućem redosledu.
- U testovima vrednim 25 poena: Bez dodatnih ograničenja.
Napomena
Garantuje se da zadatak ima rešenje i da je to rešenje jedinstveno.
Autor | Tekst i test primeri | Analiza rеšenja | Testiranje |
---|---|---|---|
Vladimir Milovanović | Aleksa Milisavljević | Aleksa Milisavljević | Aleksandar Višnjić |
Rešenje kada \(0 = X = Y < Z\)
Sedam datih brojeva su \(X\), \(Y\), \(Z\), \(X+Y\), \(X+Z\), \(Y+Z\) i\(X+Y+Z\). Kako je \(X = 0\) i \(Y=0\), to su ovih sedam vrednosti zapravo \(0\), \(0\), \(Z\), \(0\), \(Z\), \(Z\) i \(Z\). Za rešavanje ovog podzadatka, dovoljno je pronaći neku vrednost koja nije nula (ta vrednost mora biti jednaka \(Z\)) i ispisati dve \(0\) (tj. \(X\) i \(Y\)) i tu vrednost (tj. \(Z\)).
Rešenje kada \(0 \leq X \leq Y \leq Z < 100\)
U ovom slučaju možemo iterirati po svim mogućim vrednostima za \(X\), \(Y\) i \(Z\). Ukupno postoji do \(10^6\) mogućnosti za \(X\), \(Y\) i \(Z\). Potom je dovoljno da proverimo da li skup vrednosti \(X\), \(Y\), \(Z\), \(X+Y\), \(X+Z\), \(Y+Z\) i\(X+Y+Z\) za izabrano \(X\), \(Y\) i \(Z\) odgovara vrednostima sa ulaza. Ovo možemo postići na primer sortiranjem oba skupa i poređenjem svake vrednosti.
Glavno rešenje
Za glavno rešenje, dovoljno je da primetimo da je najmanja vrednost sa ulaza upravo jednaka \(X\). Zaista, važi da je \(X \leq Y, Z, X+Y, X+Z, Y+Z, X+Y+Z\). Slično tome, druga najmanja vrednost je jednaka \(Y\), jer \(Y \leq Z, X+Y, X+Z, Y+Z, X+Y+Z\). Konačno, najveća vrednost sa ulaza mora biti jednaka jednaka \(X+Y+Z\), jer \(X+Y+Z \geq X,Y,Z, X+Y, X+Z, Y+Z, X+Y+Z\). Dakle dovoljno je pronaći dve najmanje vrednosti (one redom odgovaraju \(X\) i \(Y\)), i oduzeti ih od najveće vrednosti (što odgovara \((X+Y+Z) - X - Y = Z\)).
U pretposlednjem podzadatku, niz je dat sortiran i dve najmanje vrednosti odgovaraju prva dva elementa niza, dok najveća vrednost odgovara poslednjem elementu niza. Za poslednji zadatak, možemo da sortiramo niz ili da prolaskom kroz njega odredimo ove vrednosti.
01_tri_tajna_broja.cpp | |
---|---|