egogoboy

МОШ задача C

Mar 3rd, 2023 (edited)
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.21 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. #include<vector>
  4. #include<stdint.h>
  5. #include<map>
  6. #include<string>
  7. #include<iomanip>
  8. #include<algorithm>
  9.  
  10. #define all(container) container.begin(), container.end()
  11. #define fors(counter, start, finish) for (ll counter = start; counter < finish; ++counter)
  12. #define forb(counter, start, finish) for (int counter = start; counter >= finish; --counter)
  13. #define vec(type) std::vector<type>
  14. #define dvec(type) std::vector<std::vector<type>>
  15. #define ll int64_t
  16. //#define fin std::cin
  17.  
  18. struct versh {
  19.     int idx = 0;
  20.     int weight = 0;
  21. };
  22.  
  23. int main() {
  24.  
  25.     std::ifstream fin("input.txt");
  26.     std::ofstream fout("output.txt");
  27.  
  28.     int m;
  29.     fin >> m;
  30.     fors(i, 0, m) {
  31.         int n, sum = 0; fin >> n;
  32.         vec(versh) v(n);
  33.         fors(i, 0, n) {
  34.             fin >> v[i].weight;
  35.             v[i].idx = i;
  36.             sum += v[i].weight;
  37.         }
  38.         fout << sum / 2 << std::endl;
  39.  
  40.         std::sort(all(v),
  41.             [](auto& lhs, auto& rhs) {return lhs.weight > rhs.weight; });
  42.  
  43.         fors(j, 0, n) {
  44.             int k = 0;
  45.             while (v[j].weight != 0 && k < n) {
  46.                 if (v[k].weight != 0 && k != j) {
  47.                     v[j].weight--;
  48.                     v[k].weight--;
  49.                     fout << v[j].idx + 1 << " " << v[k].idx + 1 << std::endl;
  50.                 }
  51.                 k++;
  52.             }
  53.         }
  54.     }
  55.  
  56.     return 0;
  57.  
  58. }
Advertisement
Add Comment
Please, Sign In to add comment