O clepsidră este un dispozitiv folosit pentru a măsura timpul. Clepsidra este alcătuită din două incinte de sticlă, conectate printr-un tub fin. Una dintre incinte este umplută cu nisip, acesta scurgându-se în cea de-a doua incintă, cu o viteză constantă. Clepsidra poate fi întoarsă, pentru a măsura o altă perioadă de timp.
Arheologii au descoperit un dispozitiv, pe care l-au denumit clepsidru, format din n
clepsidre identice, suprapuse, numerotate de la 1
la n
, prin care nisipul poate circula de la o clepsidră la alta datorită forţei gravitaţionale.
Studiind acest obiect, arheologii au constatat că :
- dispozitivul poate fi utilizat atât în poziţia
1
, când clepsidrele sunt în ordinea1
,2
,…,n
cu clepsidran
aşezată pe sol, cât şi în poziţia2
, când clepsidrele sunt în ordinean
,n-1
,…,1
cu clepsidra1
aşezată pe sol; - viteza de trecere a nisipului de la o incintă la alta, a aceleiaşi clepsidre, este de
1
bob de nisip/secundă, pentru toate clepsidrele, indiferent de poziţie; - trecerea clepsidrului dintr-o poziţie în alta presupune răsturnarea acestuia şi reaşezarea boabelor de nisip;
- timpul de trecere a boabelor de nisip de la o clepsidră la alta este 0.
Arheologii studiază comportarea clepsidrului realizând două experimente diferite, după cum urmează:
a) Se aşează clepsidrul în poziţia 1
, se introduc în incinta de sus a clepsidrei 1
un număr b
de boabe de nisip şi se determină după câte secunde vor ajunge toate boabele de nisip în incinta de jos a ultimei clepsidre;
Exemplu
clepsidru.in
2 323 11 2
clepsidru.out
41 10 1
Explicație
- Clepsidrul este format din
n=2
clepsidre şi în incinta de sus a primei clepsidre se introducb=3
boabe de nisip. - Toate boabele de nisip vor ajunge în incinta de jos a ultimei clepsidre după
4
secunde. - După ce clepsidrul este aşezat
3
secunde în poziţia1
şi1
secundă în poziţia2
, în clepsidre se vor găsi câte(1,1)
,(0,1)
boabe de nisip.
#include <bits/stdc++.h> using namespace std; int main() { int n,b,k,timp,p,ljos,lsup,a0=0,an=0; ifstream fin("clepsidru.in"); ofstream fout("clepsidru.out"); fin >> n >> b; fout << n + b - 1 <<'\n'; ljos = a0 = an = 0; lsup = 1 - b; fin >> k; for (int i=1;i<=k; i++) { fin>>timp>>p; if (p==1) { if (lsup<n) { lsup += timp; ljos += timp; if (lsup>=n) { lsup=n; ljos=n+b-1; } } } else { if(ljos > 0) { ljos -=timp; lsup -=timp; if (ljos <=0) { ljos = 0; lsup=1-b; } } } } if (lsup <=0) a0 = 1-lsup; if (ljos >=n) an = ljos -n+1; fout << a0 << " "; for (int i =1;i<n; ++i) if ((i>=lsup ) && (i<=ljos)) if (p==1) fout << "0\n1 "; else fout <<"1\n0 "; else fout << "0\n0 "; fout << an << "\n"; fin.close(); fout.close(); return 0; }