Advertisement
Guest User

Untitled

a guest
Mar 22nd, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.18 KB | None | 0 0
  1. // ███▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓▓▓╬╬╬╬╬╬▓█
  2. // ███▓███████▓▓╬╬╬╬╬╬╬╬╬╬╬╬▓███▓▓▓▓█▓╬╬╬▓█
  3. // ███████▓█████▓▓╬╬╬╬╬╬╬╬▓███▓╬╬╬╬╬╬╬▓╬╬▓█
  4. // ████▓▓▓▓╬╬▓█████╬╬╬╬╬╬███▓╬╬╬╬╬╬╬╬╬╬╬╬╬█
  5. // ███▓▓▓▓╬╬╬╬╬╬▓██╬╬╬╬╬╬▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
  6. // ████▓▓▓╬╬╬╬╬╬╬▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
  7. // ███▓█▓███████▓▓███▓╬╬╬╬╬╬▓███████▓╬╬╬╬▓█
  8. // ████████████████▓█▓╬╬╬╬╬▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬█
  9. // ███▓▓▓▓▓▓▓╬╬▓▓▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
  10. // ████▓▓▓╬╬╬╬▓▓▓▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
  11. // ███▓█▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
  12. // █████▓▓▓▓▓▓▓▓█▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█
  13. // █████▓▓▓▓▓▓▓██▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
  14. // █████▓▓▓▓▓████▓▓▓█▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
  15. // ████▓█▓▓▓▓██▓▓▓▓██╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬██
  16. // ████▓▓███▓▓▓▓▓▓▓██▓╬╬╬╬╬╬╬╬╬╬╬╬█▓╬▓╬╬▓██
  17. // █████▓███▓▓▓▓▓▓▓▓████▓▓╬╬╬╬╬╬╬█▓╬╬╬╬╬▓██
  18. // █████▓▓█▓███▓▓▓████╬▓█▓▓╬╬╬▓▓█▓╬╬╬╬╬╬███
  19. // ██████▓██▓███████▓╬╬╬▓▓╬▓▓██▓╬╬╬╬╬╬╬▓███
  20. // ███████▓██▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬████
  21. // ███████▓▓██▓▓▓▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓████
  22. // ████████▓▓▓█████▓▓╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬▓█████
  23. // █████████▓▓▓█▓▓▓▓▓███▓╬╬╬╬╬╬╬╬╬╬╬▓██████
  24. // ██████████▓▓▓█▓▓▓╬▓██╬╬╬╬╬╬╬╬╬╬╬▓███████
  25. // ███████████▓▓█▓▓▓▓███▓╬╬╬╬╬╬╬╬╬▓████████
  26. // ██████████████▓▓▓███▓▓╬╬╬╬╬╬╬╬██████████
  27. // ███████████████▓▓▓██▓▓╬╬╬╬╬╬▓███████████
  28. #pragma GCC optimize("Ofast")
  29. #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,tune=native")
  30. #pragma GCC optimize("unroll-loops")    
  31. #include <bits/stdc++.h>
  32. #define pb push_back
  33. #define x first
  34. #define y second
  35. #define mp make_pair
  36. #define len(a) int(a.size())
  37. #define files(FILENAME) read(FILENAME); write(FILENAME)
  38. #define read(FILENAME) freopen((string(FILENAME) + ".in").c_str(), "r", stdin)
  39. #define write(FILENAME) freopen((string(FILENAME) + ".out").c_str(), "w", stdout)
  40. using namespace std;
  41.        
  42. template<typename T1, typename T2>inline void chkmin(T1 &x, T2 y) { if (x > y) x = y; }
  43. template<typename T1, typename T2>inline void chkmax(T1 &x, T2 y) { if (x < y) x = y; }
  44. template<typename T, typename U> inline ostream &operator<< (ostream &_out, const pair<T, U> &_p) { _out << _p.first << ' ' << _p.second; return _out; }
  45. template<typename T, typename U> inline istream &operator>> (istream &_in, pair<T, U> &_p) { _in >> _p.first >> _p.second; return _in; }
  46. template<typename T> inline ostream &operator<< (ostream &_out, const vector<T> &_v) { if (_v.empty()) { return _out; } _out << _v.front(); for (auto _it = ++_v.begin(); _it != _v.end(); ++_it) { _out << ' ' << *_it; } return _out; }
  47. template<typename T> inline istream &operator>> (istream &_in, vector<T> &_v) { for (auto &_i : _v) { _in >> _i; } return _in; }
  48. template<typename T> inline ostream &operator<< (ostream &_out, const set<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
  49. template<typename T> inline ostream &operator<< (ostream &_out, const multiset<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
  50. template<typename T> inline ostream &operator<< (ostream &_out, const unordered_set<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
  51. template<typename T> inline ostream &operator<< (ostream &_out, const unordered_multiset<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; }
  52. template<typename T, typename U> inline ostream &operator<< (ostream &_out, const map<T, U> &_m) { if (_m.empty()) { return _out; } _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) { _out << ", (" << _it->first << ": " << _it->second << ')'; } return _out; }
  53. template<typename T, typename U> inline ostream &operator<< (ostream &_out, const unordered_map<T, U> &_m) { if (_m.empty()) { return _out; } _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) { _out << ", (" << _it->first << ": " << _it->second << ')'; } return _out; }
  54.        
  55. typedef long long base;
  56. typedef pair<int, int> point;      
  57. typedef complex<double> comp;
  58.  
  59. const int N = 2e3 + 5;
  60.  
  61. int n, m;
  62. long long s[N];
  63. long long v[N][N];
  64. pair<long long, long long> take[N][N];
  65.  
  66. long long gcd(long long a, long long b) {
  67.     return a == 0 ? b : gcd(b % a, a);
  68. }
  69.  
  70. bool compare(pair<long long, long long> &a, pair<long long, long long> &b) {
  71.     return (__int128) a.x * b.y < (__int128) b.x * a.y;
  72. }
  73.  
  74. int main() {
  75.     ios::sync_with_stdio(0);
  76.     srand(time(0));
  77.     //read("input");
  78.     cin >> n >> m;
  79.     for (int i = 1; i <= n; ++i) {
  80.         for (int j = 0; j < m; ++j) {
  81.             cin >> v[i][j];
  82.             v[i][j] *= n;
  83.             s[i] += v[i][j];
  84.         }
  85.         s[i] /= n;
  86.         long long cur = 0;
  87.         take[i][0] = {m, 1};
  88.         int t = 1;
  89.         for (int j = m; j--;) {
  90.             long long vx = v[i][j];
  91.             while (vx > 0) {
  92.                 auto k = min(vx, s[i] - cur);
  93.                 cur += k;
  94.                 vx -= k;
  95.                 if (cur == s[i]) {
  96.                     cur -= s[i];
  97.                     take[i][t++] = {j * v[i][j] + vx, v[i][j]};
  98.                 }
  99.             }
  100.         }
  101.     }
  102.     vector<int> alive;
  103.     vector<int> who;
  104.     vector<int> order;
  105.     for (int i = 1; i <= n; ++i) {
  106.         who.pb(i);
  107.     }
  108.     while (who.size() > 1) {
  109.         int it = 0;
  110.         for (int i = 1; i < who.size(); ++i) {
  111.             if (compare(take[who[i]][(int)who.size() - 1], take[who[it]][(int)who.size() - 1])) {
  112.                 it = i;
  113.             }
  114.         }
  115.         auto v = gcd(take[who[it]][(int)who.size() - 1].x, take[who[it]][(int)who.size() - 1].y);
  116.         take[who[it]][(int)who.size() - 1].x /= v;
  117.         take[who[it]][(int)who.size() - 1].y /= v;
  118.         cout << take[who[it]][(int)who.size() - 1] << '\n';
  119.         order.pb(who[it]);
  120.         who.erase(who.begin() + it);
  121.     }
  122.     order.pb(who[0]);
  123.     cout << order << '\n';
  124. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement