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;
}