YEZAELP

CUBE-060: Jet’s position

Jun 10th, 2021 (edited)
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int INF = 1e9;
  5. const int N = 1e5;
  6. int L[N+10], R[N+10];
  7. int s, e;
  8.  
  9. int main(){
  10.  
  11.     int n;
  12.     scanf("%d", &n);
  13.  
  14.     int Lsum = 0, Rsum = 0;
  15.  
  16.     for(int i=1;i<=n;i++){
  17.         char drt;
  18.         int x;
  19.         scanf(" %c %d", &drt, &x);
  20.         if(drt == 'L') {
  21.             Lsum += x;
  22.             L[i] = x;
  23.             R[i] -= x;
  24.         }
  25.         else {
  26.             Rsum += x;
  27.             R[i] = x;
  28.             L[i] -= x;
  29.         }
  30.     }
  31.  
  32.     /// Right mirror
  33.     int Rmx = -INF, Rs, Re;
  34.     s = 0;
  35.     e = 0;
  36.     for(int i=1;i<=n;i++){
  37.         if(R[i] >= R[i-1] + R[i]){
  38.             // R[i] = R[i]
  39.             s = i;
  40.             e = i;
  41.         }
  42.         else {
  43.             R[i] = R[i-1] + R[i];
  44.             e = i;
  45.         }
  46.         if(R[i] > Rmx){
  47.             Rmx = R[i];
  48.             Rs = s;
  49.             Re = e;
  50.         }
  51.         else if(R[i] == Rmx){
  52.             if(e-s+1 < Re-Rs+1){
  53.                 Rs = s;
  54.                 Re = e;
  55.             }
  56.             else if(e-s+1 == Re-Rs+1){
  57.                 if(s < Rs){
  58.                     Rs = s;
  59.                     Re = e;
  60.                 }
  61.             }
  62.         }
  63.     }
  64.  
  65.     /// Left mirror
  66.     int Lmx = -INF, Ls, Le;
  67.     s = 0;
  68.     e = 0;
  69.     for(int i=1;i<=n;i++){
  70.         if(L[i] >= L[i-1] + L[i]){
  71.             // L[i] = L[i]
  72.             s = i;
  73.             e = i;
  74.         }
  75.         else {
  76.             L[i] = L[i-1] + L[i];
  77.             e = i;
  78.         }
  79.         if(L[i] > Lmx){
  80.             Lmx = L[i];
  81.             Ls = s;
  82.             Le = e;
  83.         }
  84.         else if(L[i] == Lmx){
  85.             if(e-s+1 < Le-Ls+1){
  86.                 Ls = s;
  87.                 Le = e;
  88.             }
  89.             else if(e-s+1 == Le-Ls+1){
  90.                 if(s < Ls){
  91.                     Ls = s;
  92.                     Le = e;
  93.                 }
  94.             }
  95.         }
  96.     }
  97.  
  98.     if(Rsum + Lmx >= Lsum + Rmx) printf("R %d %d %d", Rsum + Lmx, Ls, Le);
  99.     else printf("L %d %d %d", Lsum + Rmx, Rs, Re);
  100.  
  101.     return 0;
  102. }
  103.  
  104. /*
  105.  
  106. 10
  107. L 10
  108. R 5
  109. L 12
  110. L 5
  111. R 7
  112. R 8
  113. R 10
  114. L 8
  115. R 9
  116. L 10
  117. L 71 5 9
  118.  
  119. 5
  120. L 1
  121. L 2
  122. L 1
  123. L 2
  124. L 1
  125. R 7 1 5
  126.  
  127. 10
  128. R 1
  129. R 2
  130. L 1
  131. L 2
  132. R 3
  133. L 1
  134. R 2
  135. L 5
  136. R 1
  137. R 1
  138. R 15 8 8
  139.  
  140. 5
  141. L 1
  142. L 2
  143. L 3
  144. L 4
  145. R 10
  146. R 20 1 4
  147.  
  148. 8
  149. L 1
  150. L 2
  151. R 1
  152. R 2
  153. R 1
  154. L 2
  155. R 2
  156. L 1
  157. L 10 3 5
  158.  
  159. 8
  160. R 1
  161. R 2
  162. L 1
  163. L 2
  164. L 1
  165. R 2
  166. L 2
  167. R 1
  168. R 10 3 5
  169.  
  170. */
Add Comment
Please, Sign In to add comment