Advertisement
Glenpl

Untitled

Jun 21st, 2015
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.35 KB | None | 0 0
  1. #include <set>
  2. #include <vector>
  3. #include <utility>
  4. #include <cstdio>
  5.  
  6. std::multiset<int> suma_multizbiorow(std::multiset<int> multisetA, std::multiset<int> multisetB)
  7. {
  8.     std::multiset<int> multisetC;
  9.  
  10.     std::multiset<int>::iterator ptr = multisetA.begin();
  11.  
  12.     for(unsigned i = 0; i < multisetA.size(); i++)
  13.     {
  14.         multisetC.insert(*ptr);
  15.         ptr++;
  16.     }
  17.  
  18.     ptr = multisetB.begin();
  19.  
  20.     for(unsigned i = 0; i < multisetB.size(); i++)
  21.     {
  22.         multisetC.insert(*ptr);
  23.         ptr++;
  24.     }
  25.  
  26.     return multisetC;
  27. }
  28.  
  29. std::multiset<int> obciecie_multizbioru(std::multiset<int> multisetE, unsigned int rozmiar)
  30. {
  31.     std::multiset<int> multisetWynikowy;
  32.     std::multiset<int>::iterator ptr = multisetE.begin();
  33.  
  34.     if( multisetE.size() < rozmiar ) rozmiar = multisetE.size();
  35.  
  36.     for(unsigned i = 0; i < rozmiar; i++)
  37.     {
  38.         multisetWynikowy.insert( *ptr );
  39.         ptr++;
  40.     }
  41.  
  42.     return multisetWynikowy;
  43. }
  44.  
  45. int suma_elementow_zbioru(std::multiset<int> multisetA)
  46. {
  47.     int suma = 0;
  48.  
  49.     std::multiset<int>::iterator ptr = multisetA.begin();
  50.  
  51.     for(unsigned i = 0; i < multisetA.size(); i++)
  52.     {
  53.         suma += *ptr;
  54.         ptr++;
  55.     }
  56.  
  57.     return suma;
  58. }
  59.  
  60. int liczba_roznych_elementow_multizbioru(std::multiset<int> multisetA)
  61. {
  62.     std::set<int> setA;
  63.  
  64.     std::multiset<int>::iterator ptr = multisetA.begin();
  65.  
  66.     for(unsigned i = 0; i < multisetA.size(); i++)
  67.     {
  68.         setA.insert(*ptr);
  69.         ptr++;
  70.     }
  71.  
  72.     return setA.size();
  73. }
  74.  
  75. std::multiset<int> suma_alternatywna_multizbiorow(std::multiset<int> multisetE, std::multiset<int> multisetF, std::multiset<int> multisetG, int rozmiar)
  76. {
  77.     std::multiset<int> multisetRoboczy;
  78.     std::multiset<int> multisetWynikowy;
  79.  
  80.     if( suma_elementow_zbioru(multisetE) % 2 == 0 )
  81.         multisetRoboczy = suma_multizbiorow( multisetE, multisetF );
  82.     else
  83.         multisetRoboczy = suma_multizbiorow( multisetE, multisetG );
  84.  
  85.     multisetWynikowy = obciecie_multizbioru( multisetRoboczy, rozmiar );
  86.  
  87.     return multisetWynikowy;
  88. }
  89.  
  90. int main()
  91. {
  92.     int n, m, k;
  93.     scanf("%d %d %d", &n, &m, &k);
  94.  
  95.     std::vector<std::multiset<int> > multizbioryX;
  96.     std::vector<std::pair<int, int> > paryIndexow;
  97.  
  98.     std::multiset<int> multisetRoboczy;
  99.  
  100.     for(short i = 0; i < n; i++)
  101.     {
  102.         int rozmiarMultizbioru, elementZbioru;
  103.         scanf("%d", &rozmiarMultizbioru);
  104.  
  105.         for(int j = 0; j < rozmiarMultizbioru; j++)
  106.         {
  107.             scanf("%d", &elementZbioru);
  108.             multisetRoboczy.insert(elementZbioru);
  109.         }
  110.  
  111.         multizbioryX.push_back( multisetRoboczy );
  112.  
  113.         multisetRoboczy.clear();
  114.     }
  115.  
  116.     for(int i = 0; i < k; i++)
  117.     {
  118.         int x, y;
  119.         scanf("%d %d", &x, &y);
  120.         paryIndexow.push_back( std::make_pair(x, y) );
  121.     }
  122.  
  123.     // A = [ {}, multizbioryX[paryIndexow[ ITERATOR_0_DO_K ].first], multizbioryX[paryIndexow[ ITERATOR_0_DO_K ].second], m]
  124.  
  125.     std::multiset<int> multizbiorSzukany;
  126.  
  127.     for(int i = 0; i < k; i++)
  128.     {
  129.         multizbiorSzukany = suma_alternatywna_multizbiorow( multizbiorSzukany , multizbioryX[ paryIndexow[ i ].first ], multizbioryX[paryIndexow[ i ].second], m);
  130.     }
  131.  
  132.     printf("%d %d", suma_elementow_zbioru(multizbiorSzukany), liczba_roznych_elementow_multizbioru(multizbiorSzukany));
  133.  
  134.     return 0;
  135. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement