fork download
  1. #include <bits/stdc++.h>
  2. typedef std::pair<int, int> pii;
  3. using namespace std;
  4.  
  5. int const INF = 1 << 30;
  6. int const INIT = 1 << 28;
  7. int n;
  8. vector<pii> a, b, c;
  9. vector<int> p;
  10.  
  11. bool d(int x) {
  12. vector<pii> q, r, s;
  13. int qq[] = {x, 0, 0};
  14. int rr[] = {0, x, 0};
  15. int ss[] = {0, 0, x};
  16. for(int i=0; i<3; i++) {
  17. vector<pii> result(n);
  18. for(int j=0; j<n; j++) result[j] = make_pair(0, j);
  19. q = a, r = b, s = c;
  20. q[0].first += qq[i];
  21. r[0].first += rr[i];
  22. s[0].first += ss[i];
  23.  
  24. sort(q.begin(), q.end(), greater<pii>());
  25. sort(r.begin(), r.end(), greater<pii>());
  26. sort(s.begin(), s.end(), greater<pii>());
  27. int sq = INF, sr = INF, ss = INF;
  28. int gq = -1, gr = -1, gs = -1;
  29. for(int j=0; j<n; j++) {
  30. int nq = q[j].first;
  31. int nr = r[j].first;
  32. int ns = s[j].first;
  33. if(nq < sq) sq = nq, gq = j;
  34. if(nr < sr) sr = nr, gr = j;
  35. if(ns < ss) ss = ns, gs = j;
  36. result[q[j].second].first += p[gq];
  37. result[r[j].second].first += p[gr];
  38. result[s[j].second].first += p[gs];
  39. }
  40. sort(result.begin(), result.end(), greater<pii>());
  41. int rank = -1;
  42. int temp = INF, idx = -1;
  43. for(int j=0; j<n; j++) {
  44. int cur = result[j].first;
  45. if(cur < temp) temp = cur, idx = j;
  46. if(result[j].second == 0) rank = idx+1;
  47. }
  48. if(rank < 9) return true;
  49. }
  50. return false;
  51. }
  52.  
  53. int main() {
  54. cin >> n;
  55. a.resize(n);
  56. b.resize(n);
  57. c.resize(n);
  58. p.resize(n);
  59. for(int i=0; i<n; i++) cin >> p[i];
  60. for(int i=0; i<n; i++) {
  61. int x, y, z; cin >> x >> y >> z;
  62. a[i] = make_pair(x, i);
  63. b[i] = make_pair(y, i);
  64. c[i] = make_pair(z, i);
  65. }
  66. int ub = INIT, lb = -1;
  67. while(ub - lb > 1) {
  68. int mid = (ub + lb) / 2;
  69. if(d(mid)) ub = mid;
  70. else lb = mid;
  71. }
  72. if(ub < INIT) cout << ub << endl;
  73. else cout << "Saiko" << endl;
  74. return 0;
  75. }
Success #stdin #stdout 0s 16072KB
stdin
9
9 8 7 6 5 4 3 2 1
1 1 1
2 2 2
3 3 3
4 4 4
5 5 5
6 6 6
7 7 7
8 8 8
9 9 9
stdout
2