Dve kante
Dve kante sadrže a i b litara vode. Svako sipanje od v litara ide u kantu koja trenutno ima manje vode, ako imaju jednako vode onda v litara ide u prvu kantu.
Ulaz
U prvom redu učitavaju se početne količine vode u kantama a i b. U drugom redu učitava se broj sipanja q. U trećem redu učitava se q količina za svako sipanje.
Izlaz
Nakon svakog sipanja ispisati trenutne količine vode u kantama a i b.
Primer
Ulaz
3 5
4
4 1 2 6
Izlaz
7 5
7 6
7 8
13 8
Postavka
main.cpp
#include <iostream>
namespace matf
{
// TODO (1): implementirati praznija
// vraca referencu na kantu sa manje vode,
// ako su isti onda vraca prvi argument
int& praznija(int& a, int& b)
{
return undefined;
}
} // namespace matf
int main()
{
int a, b, q;
std::cin >> a >> b >> q;
for (int i = 0; i < q; ++i) {
int v;
std::cin >> v;
matf::praznija(a, b) += v;
std::cout << a << ' ' << b << std::endl;
}
return 0;
}
Rešenje
main.cpp
#include <iostream>
namespace matf
{
// O(1); vraca kantu sa manje vode - samu kantu, ne kopiju.
int& praznija(int& a, int& b)
{
if (b < a)
return b;
return a;
}
} // namespace matf
int main()
{
int a, b, q;
std::cin >> a >> b >> q;
for (int i = 0; i < q; ++i) {
int v;
std::cin >> v;
matf::praznija(a, b) += v;
std::cout << a << ' ' << b << std::endl;
}
return 0;
}