Sistemul imperial de unități de măsură, folosit în SUA, este un adevărat haos (vezi imaginea de mai jos!). Mai mult, americanii sunt încăpățânați și nu vor să folosească sistemul metric, așa că, momentan, trebuie să deslușim misterul transformării dintr-o unitate de măsură în alta, fiind date o serie de reguli de transformare.
Cerință
Se dau mai multe reguli de transformare de tipul ! 1000 m km
, însemnând . În același timp, se dau întrebări de tipul ? 54.8 km m
, însemnând (transformă în ).
Răspundeți la întrebări, folosind doar regulile de transformare date înainte de acestea!
Date de intrare
Prima linie conține un număr natural , numărul de teste. Pentru fiecare test se va afișa un număr natural . Pe următoarele linii ale testului se vor afla cvadruplete de tipul (caracter, șir de caractere, număr real, șir de caractere). Primul element (caracterul) poate fi doar !
(care simbolizează o regulă de transformare) sau ?
(care simbolizează o întrebare).
Date de ieșire
Se vor afișa răspunsurile la întrebări pe linii separate (linia va conține răspunsul la întrebarea ). Toate numerele afișate vor fi numere naturale. Se va afișa răspunsul la întrebare rotunjit la cel mai apropiat număr întreg. Dacă nu se pot transforma unitățile folosind regulile date, se va afișa -1
.
Pentru a afișa variabila x
de tip double
/long double
rotunjită la cel mai apropiat număr întreg, includeți biblioteca cmath
și folosiți instrucțiunea std::cout << (long long)std::round(x);
.
Restricții și precizări
- Se recomandă folosirea tipurilor de date
double
saulong double
(în loc defloat
) pentru reprezentarea numerelor reale. - Se dau cel puțin două unități și cel puțin o întrebare.
- Șirurile de caractere reprezentând unitățile de măsură au lungime de minim și maxim și sunt formate din litere mici ale alfabetului englez.
- Numerele reale din întrebări sunt cuprinse între și inclusiv.
- Se garantează că valorile tuturor rapoartelor dintre unități sunt cuprinse între exclusiv și inclusiv (ceea ce nu depășește tipurile
double
/long double
). - În cadrul regulilor nu vor exista „cicluri” (de exemplu, dacă se dau regulile de transformare din în , din în și din în , atunci în mod sigur nu se va da regula de transformare din în sau din în ).
- Pentru transformarea între două unități se va da cel mult câte o regulă.
- O unitate de măsură se poate „transforma” în ea însăși chiar dacă nu a fost definită!
- Pentru 70 de puncte, toate regulile de transformare vor fi date înaintea primei întrebări!
- Pentru citirea și afișarea rapidă, se recomandă folosirea acestor linii de cod la începutul funcției
main
:
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
Exemplu
stdin
2
8
! 1000 m km
! 0.001 m mm
? 0.36 km mm
? 79 km cm
! 10 mm cm
? 79 km cm
! 60 min h
? 135 m min
11
! 12 pt pica
! 20 twip pt
! 63 pt fng
! 0.875 in fng
? 250 pt in
! 8 fur mi
! 1760 yd mi
? 0.35 twip fur
! 12 in ft
! 3 ft yd
? 0.5 fur twip
stdout
360000
-1
7900000
-1
3
-1
5702400
Explicație
Avem două teste (cel cu , , etc. și cel cu , , etc.)
.
Folosind doar regulile date înaintea celei de-a doua întrebări, nu se poate transforma din în .
Pentru întrebarea a treia, mai avem în plus o regulă de transformare din în . Astfel, .
Pentru ultima întrebare a primului test, nu se poate transforma din în folosind regulile date.