Advertisement
JosepRivaille

P16072: Intersecció de taules

May 28th, 2015
1,470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.87 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. typedef vector<double> Row;
  6.  
  7. Row interseccio(const Row&v1, const Row&v2) {
  8.     int s1 = v1.size();
  9.     int s2 = v2.size();
  10.     int s3;
  11.     if (s1 > s2) s3 = s2;
  12.     else s3 = s1;
  13.     Row aux(s3);
  14.     int i, j, k;
  15.     i = j = k = 0;
  16.     while (i < s1 and j < s2) {
  17.         if (v1[i] > v2[j]) ++j;
  18.         else if (v1[i] < v2[j]) ++i;
  19.         else if (k == 0 or aux[k-1] != v1[i]) {
  20.             aux[k] = v1[i];
  21.             ++i;
  22.             ++j;
  23.             ++k;
  24.         }
  25.         else {
  26.             ++i;
  27.             ++j;
  28.         }
  29.     }
  30.     Row v3(k);
  31.     for (i = 0; i < k; ++i) v3[i] = aux[i];
  32.     return v3;
  33. }
  34.  
  35. int main() {
  36.     int n;
  37.     cin >> n;
  38.     Row v1(n);
  39.     for (int i = 0; i < n; ++i) cin >> v1[i];
  40.     int k;
  41.     cin >> k;
  42.     Row v2(k);
  43.     for (int i = 0; i < k; ++i) cin >> v2[i];
  44.     Row v3;
  45.     v3 = interseccio(v1, v2);
  46.     for (int i = 0; i < v3.size(); ++i) {
  47.         if (i > 0) cout << ' ';
  48.         cout << v3[i];
  49.     }
  50.     cout << endl;
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement