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,…,ncu clepsidranaşezată pe sol, cât şi în poziţia2, când clepsidrele sunt în ordinean,n-1,…,1cu clepsidra1aşezată pe sol; - viteza de trecere a nisipului de la o incintă la alta, a aceleiaşi clepsidre, este de
1bob 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=2clepsidre şi în incinta de sus a primei clepsidre se introducb=3boabe de nisip. - Toate boabele de nisip vor ajunge în incinta de jos a ultimei clepsidre după
4secunde. - După ce clepsidrul este aşezat
3secunde în poziţia1şi1secundă î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;
}