Guest User

gen

a guest
Jun 27th, 2020
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.36 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #include <chrono>
  3.  
  4. using namespace std;
  5. using namespace std::chrono;
  6.  
  7. // #pragma GCC target ("avx2")
  8. // #pragma GCC optimization ("O3")
  9. // #pragma GCC optimization ("unroll-loops")
  10. // #pragma optimization_level 3
  11. // #pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
  12. // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
  13.  
  14. #define f0r(a, b) for (long long a = 0; a < (b); ++a)
  15. #define f1r(a, b, c) for (long long a = (b); a < (c); ++a)
  16. #define f0rd(a, b) for (long long a = (b); a >= 0; --a)
  17. #define f1rd(a, b, c) for (long long a = (b); a >= (c); --a)
  18. #define ms(arr, v) memset(arr, v, sizeof(arr))
  19. #define pb push_back
  20. #define send {ios_base::sync_with_stdio(false);}
  21. #define help {cin.tie(NULL); cout.tie(NULL);}
  22. #define fix(prec) {cout << setprecision(prec) << fixed;}
  23. #define mp make_pair
  24. #define f first
  25. #define s second
  26. #define all(v) v.begin(), v.end()
  27. #define getunique(v) {sort(all(v)); v.erase(unique(all(v)), v.end());}
  28. #define readgraph(list, edges) for (int i = 0; i < edges; i++) {int a, b; cin >> a >> b; a--; b--; list[a].pb(b); list[b].pb(a);}
  29. #define ai(a, n) for (int ele = 0; ele < n; ele++) cin >> a[ele];
  30. #define ain(a, lb, rb) for (int ele = lb; ele <= rb; ele++) cin >> a[ele];
  31. #define ao(a, n) {for (int ele = 0; ele < (n); ele++) { if (ele) cout << " "; cout << a[ele]; } cout << '\n';}
  32. #define aout(a, lb, rb) {for (int ele = (lb); ele <= (rb); ele++) { if (ele > (lb)) cout << " "; cout << a[ele]; } cout << '\n';}
  33. #define vsz(x) ((long long) x.size())
  34. typedef long long ll;
  35. typedef double ld;
  36. typedef long double lld;
  37. typedef unsigned long long ull;
  38. typedef pair<int, int> pii;
  39. typedef pair<ll, ll> pll;
  40. typedef vector<int> vi;
  41. typedef vector<ll> vl;
  42. typedef vector<pii> vpi;
  43. typedef vector<pll> vpl;
  44.  
  45. template<typename A> ostream& operator<<(ostream &cout, vector<A> const &v);
  46. template<typename A, typename B> ostream& operator<<(ostream &cout, pair<A, B> const &p) { return cout << "(" << p.f << ", " << p.s << ")"; }
  47. template<typename A> ostream& operator<<(ostream &cout, vector<A> const &v) {
  48. cout << "["; for(int i = 0; i < v.size(); i++) {if (i) cout << ", "; cout << v[i];} return cout << "]";
  49. }
  50. template<typename A, typename B> istream& operator>>(istream& cin, pair<A, B> &p) {
  51. cin >> p.first;
  52. return cin >> p.second;
  53. }
  54.  
  55. // mt19937 rng(steady_clock::now().time_since_epoch().count());
  56. mt19937 rng(61378913);
  57. /* usage - just do rng() */
  58.  
  59. void usaco(string filename) {
  60. // #pragma message("be careful, freopen may be wrong")
  61. freopen((filename + ".in").c_str(), "r", stdin);
  62. freopen((filename + ".out").c_str(), "w", stdout);
  63. }
  64.  
  65. const lld pi = 3.14159265358979323846;
  66. const ll mod = 1000000007;
  67. // const ll mod = 998244353;
  68. // ll mod;
  69.  
  70.  
  71.  
  72. ll n, m, k, q, l, r, x, y, z;
  73. lld a[1000005];
  74. lld b[1000005];
  75. lld c[1000005];
  76. string s, t;
  77. ll ans = 0;
  78.  
  79. const int N = 5;
  80. const int MX = 100000;
  81. const int MXG = 100000;
  82. const lld EPS = 1e-6;
  83.  
  84. ll rn() {
  85. return ((ll)rng() << 21) + rng();
  86. }
  87.  
  88. void gen() {
  89. f0r(i, N) {
  90. a[i] = rn() % MX + 1;
  91. b[i] = rn() % MX + 1;
  92. c[i] = rn() % MXG + 1;
  93. }
  94. a[N] = mod * mod;
  95. b[N] = mod * mod;
  96. c[N] = 0;
  97. }
  98.  
  99. pair<lld, lld> solve_fast() {
  100. lld sum1=0,sum2=0;
  101. for(int i=0;i<N;i++){
  102. sum1+=(c[i]/(a[i]+b[i]))*b[i];
  103. sum2+=(c[i]/(a[i]+b[i]))*a[i];
  104. }
  105.  
  106. return mp(sum1, sum2);
  107. }
  108.  
  109. /* O((N!)^2) */
  110. pair<lld, lld> solve_slow() {
  111. lld best = 0;
  112. int perm1[N], perm2[N];
  113. iota(perm1, perm1 + N, 0);
  114. do {
  115. lld cworst = mod * mod; // INF
  116.  
  117. iota(perm2, perm2 + N, 0);
  118. do {
  119. lld left__[N + 1];
  120. f0r(i, N + 1) left__[i] = 1;
  121. int pt1 = 0, pt2 = 0;
  122. lld cur = 0;
  123.  
  124. while (1) {
  125. int pos1 = N, pos2 = N;
  126. if (pt1 < N) pos1 = perm1[pt1];
  127. if (pt2 < N) pos2 = perm2[pt2];
  128.  
  129. if (pt1 == N && pt2 == N) break;
  130.  
  131. lld ntime;
  132. lld rate1 = 1 / a[pos1];
  133. lld rate2 = 1 / b[pos2];
  134. if (pos1 == pos2) {
  135. ntime = left__[pos1] / (rate1 + rate2);
  136. } else {
  137. ntime = min(left__[pos1] / rate1, left__[pos2] / rate2);
  138. }
  139.  
  140. lld prog1 = ntime * rate1;
  141. lld prog2 = ntime * rate2;
  142.  
  143. cur += prog1 * c[pos1];
  144.  
  145. left__[pos1] -= prog1;
  146. left__[pos2] -= prog2;
  147.  
  148. while (pt1 < N && left__[perm1[pt1]] < EPS) {
  149. ++pt1;
  150. }
  151. while (pt2 < N && left__[perm2[pt2]] < EPS) {
  152. ++pt2;
  153. }
  154. }
  155.  
  156. cworst = min(cworst, cur);
  157. } while (next_permutation(perm2, perm2 + N));
  158.  
  159. best = max(best, cworst);
  160. } while (next_permutation(perm1, perm1 + N));
  161.  
  162. lld tot = 0;
  163. f0r(i, N) tot += c[i];
  164. return mp(best, tot - best);
  165. }
  166.  
  167. void solve(int tc) {
  168. int count = 0;
  169. while (1) {
  170. ++count;
  171. gen();
  172.  
  173. pair<lld, lld> ans1 = solve_fast();
  174. pair<lld, lld> ans2 = solve_slow();
  175.  
  176. if (abs(ans1.f - ans2.f) > EPS || abs(ans1.s - ans2.s) > EPS) {
  177. cout << "FAILED " << count << endl;
  178. fix(0);
  179. f0r(i, N) {
  180. cout << c[i] << " " << a[i] << " " << b[i] << endl;
  181. }
  182. fix(15);
  183. cout << ans1 << " " << ans2 << endl;
  184. return;
  185. }
  186. cout << "PASSED " << count << endl;
  187. }
  188. }
  189.  
  190. int main() {
  191. send help
  192.  
  193. // usaco("cowland");
  194.  
  195. int tc = 1;
  196. // cin >> tc;
  197. for (int t = 0; t < tc; t++) solve(t);
  198. }
Add Comment
Please, Sign In to add comment