Revizia anterioară Revizia următoare
| Fișierul intrare/ieșire | taieri.in, taieri.out | Sursă | ONI 2021, clasa 5-a (OSEPI) |
|---|---|---|---|
| Autor | Marius Nicoli | Adăugată de |
|
| Timp de execuție pe test | 0.2 sec | Limită de memorie | 65536 KB |
| Scorul tău | N/A | Dificultate |
Vezi soluțiile trimise | Statistici
Tăieri (clasa a 5-a)
Avem la dispoziție n bare metalice cu aceeași grosime, dar lungimi diferite. Putem alege oricare bară și să o tăiem, obținând alte două bare, de lungimi mai mici. Ne dorim ca, folosind doar această operație (deci fără să le putem suda), să obținem un număr de bare de anumite lungimi date. Mai exact, dându-se un set de 4 numere a, b, c, d, trebuie să decidem dacă putem obține a bare de lungime 1, b bare de lungime 2, c bare de lungime 4 și d bare de lungime 8. Odată aplicată o tăiere de lungime L asupra unei bare, restul poate fi în continuare folosit pentru a tăia alte bare de oricare dintre lungimile dorite.
Cerință
Cunoscând n – numărul de bare metalice și lungimile celor n bare metalice avute la dispoziție, pentru fiecare din seturile de 4 numere a b c d date, determinați dacă, pornind de la cele n lungimi date, se pot obține barele de lungimile dorite.
Date de intrare
Pe prima linie a fișierului de intrare taieri.in se află numărul natural n. Pe linia a doua se află cele n numere naturale ce reprezintă lungimile barelor inițiale. Pe linia a treia se află un număr natural m ce reprezintă numărul de seturi de 4 numere. Pe fiecare din următoarele m linii se află câte patru numere naturale a b c d cu semnificația de mai sus.
Numerele de pe aceeași linie sunt separate prin câte un spațiu.
Date de ieșire
Fișierul de ieșire taieri.out va conține m valori 0 și 1, separate prin câte un spațiu. Pentru fiecare set de 4 numere, în ordinea apariției lor în fișierul de intrare, se scrie în fișierul de intrare valoarea 1, dacă se poate obține numărul dorit de bare pentru toate cele 4 lungimi din setul corespunzător, respectiv 0 în caz contrar.
Restricții și precizări
- Lungimile barelor sunt numere naturale nenule cel mult egale cu 10 000 000.
- 0 ≤ a; b; c; d 10 000 000.
- Pentru teste în valoare de 16 puncte 1 ≤ n ≤ 1 000, 1 ≤ m ≤ 1 000, iar pentru toate seturile dintr-un test avem *b*= 0, *c*= 0 și *d*= 0.
- Pentru alte teste în valoare de 28 puncte 1 ≤ n ≤ 1 000 și 1 ≤ m ≤ 1 000.
- Pentru alte teste în valoare de 56 puncte 1 ≤ n ≤ 1 000 000 și 1 ≤ m ≤ 100 000.
Exemple
table(example).
|_. taieri.in |_. taieri.out |_. Explicații |
| 5
10 12 8 3 1
3
2 3 2 2
31 0 0 0
1 13 0 1
| 1 1 1
| La primul set – 2 3 2 2 trebuie obținute două bare de lungime 1, trei bare de lungime 2, două de lungime 4 și două de lungime 8. Putem tăia bara de lungime 10 în una de 8 și una de 2. Avem deja a doua bară de lungime 8. Ne mai rămân astfel bare cu lungimile: 2, 12, 3 și 1. Cele două bare de lungime 4 le putem tăia din cea de lungime 12, rămânându-ne bare de lungimile 2, 4, 3 și 1. Pentru cele 3 de lungime 2 putem folosi prima bară și pe a doua o tăiem în două bucăți, iar pe cele 4 de lungime 1 le putem obține folosind barele cu lungimile 3 și 1 rămase.
La al doilea set – 31 0 0 0 putem obține din prima bară dată 10 bare de lungime 1, din a doua 12 bare de lungime 1, din a treia încă 8 bare de lungime 1 și mai avem ultima bară deja de lungime 1, așadar se pot obține cele 31 de bare necesare. Remarcați că nu a fost nevoie să folosim bara de lungime 3. Se observă că nu este nevoie să obținem bare de lungimile 2, 4, 8.
La al treilea set – 1 13 0 1, oricum am tăia barele avute la dispoziție, nu putem obține întreg setul format din : o bară de lungime 1, 13 bare de lungime 2 și o bară de lungime 8.

Poți vedea testele pentru această problemă accesând