Advertisement
mickypinata

CUBE-T060: Jet's Position

Jun 8th, 2021
1,093
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.28 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. enum status {
  5.     STT = 2, REV = 0, ALD = 1
  6. };
  7.  
  8. const int N = 1e5;
  9.  
  10. int dp[2][3][2], par[2][2][N + 10];
  11.  
  12. int main(){
  13.  
  14.     int nGirl;
  15.     scanf("%d", &nGirl);
  16.     for(int i = 1; i <= nGirl + 1; ++i){
  17.         char facing = 'R';
  18.         int cute = 0;
  19.         bool isFacingR;
  20.         if(i <= nGirl){
  21.             scanf(" %c%d", &facing, &cute);
  22.             if(facing == 'R'){
  23.                 isFacingR = true;
  24.             } else if(facing == 'L'){
  25.                 isFacingR = false;
  26.             }
  27.         }
  28.         for(int d = 0; d < 2; ++d){
  29.             bool trDir = (d == 0);
  30.             if(i == 1){
  31.                 if(isFacingR == trDir){
  32.                     dp[d][STT][1] = cute;
  33.                     dp[d][REV][1] = 0;
  34.                 } else {
  35.                     dp[d][REV][1] = cute;
  36.                     dp[d][STT][1] = 0;
  37.                 }
  38.                 dp[d][ALD][1] = 0;
  39.                 par[d][REV][1] = 1;
  40.                 par[d][ALD][1] = 0;
  41.                 continue;
  42.             }
  43.             int curr = i % 2;
  44.             int prev = curr ^ 1;
  45.             dp[d][STT][curr] = dp[d][STT][prev];
  46.             if(dp[d][STT][prev] >= dp[d][REV][prev]){
  47.                 dp[d][REV][curr] = dp[d][STT][prev];
  48.                 par[d][REV][i] = i;
  49.             } else {
  50.                 dp[d][REV][curr] = dp[d][REV][prev];
  51.                 par[d][REV][i] = par[d][REV][i - 1];
  52.             }
  53.             if(dp[d][REV][prev] > dp[d][ALD][prev]){
  54.                 dp[d][ALD][curr] = dp[d][REV][prev];
  55.                 par[d][ALD][i] = i - 1;
  56.             } else {
  57.                 dp[d][ALD][curr] = dp[d][ALD][prev];
  58.                 par[d][ALD][i] = par[d][ALD][i - 1];
  59.             }
  60.             dp[d][STT][curr] += (isFacingR == trDir) ? cute : 0;
  61.             dp[d][REV][curr] += (isFacingR != trDir) ? cute : 0;
  62.             dp[d][ALD][curr] += (isFacingR == trDir) ? cute : 0;
  63.         }
  64.     }
  65.  
  66.     int last = (nGirl + 1) % 2;
  67.     if(dp[0][ALD][last] >= dp[1][ALD][last]){
  68.         printf("R %d %d %d", dp[0][ALD][last], par[0][REV][par[0][ALD][nGirl + 1]], par[0][ALD][nGirl + 1]);
  69.     } else {
  70.         printf("L %d %d %d", dp[1][ALD][last], par[1][REV][par[1][ALD][nGirl + 1]], par[1][ALD][nGirl + 1]);
  71.     }
  72.  
  73.     return 0;
  74. }
  75.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement