JosepRivaille

P76675: F017A. Manipulant dates

May 10th, 2015
632
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. const int MAX = 10000;
  6.  
  7. struct Data {
  8.     int dia, mes, any;
  9. };
  10.  
  11. typedef vector<Data> Dates;
  12.  
  13. Data data_llegida() {
  14.     Data d;
  15.     char c;
  16.     cin >> d.dia >> c >> d.mes >> c >> d.any;
  17.     return d;
  18. }
  19.  
  20. int comp(const Data& a, const Data& b) {
  21.     return a.any*10000 + a.mes*100 + a.dia - b.any*10000 - b.mes*100 - b.dia;
  22. }
  23.  
  24. //Retorna la pos de x en v
  25. int cerca(int esq, int dre, const Data& x, const Dates& v) {
  26.     int mig = (esq + dre) / 2;
  27.     int c = comp(x, v[mig]);
  28.     if (c < 0) return cerca(esq, mig - 1, x, v);
  29.     if (c > 0) return cerca(mig + 1, dre, x ,v);
  30.     return mig;
  31. }
  32.  
  33.  
  34. //Pre: Llegeix una seqüència d'addició eliminació o comparació de dates
  35. //Post: Escriu la distància entre dues dates al comparar
  36. int main() {
  37.     Dates v(MAX);
  38.     int n = 0;
  39.     char c;
  40.     while (cin >> c) {
  41.         if (c == 'A') {
  42.             v[n] = data_llegida();
  43.             ++n;
  44.         }
  45.         else if (c == 'E') --n;
  46.         else {
  47.             Data a = data_llegida();
  48.             Data b = data_llegida();
  49.             cout << cerca(0, n - 1, b, v) - cerca(0, n - 1, a, v) << endl;
  50.         }
  51.     }
  52. }
Advertisement
Add Comment
Please, Sign In to add comment