Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- enum status {
- STT = 2, REV = 0, ALD = 1
- };
- const int N = 1e5;
- int dp[2][3][2], par[2][2][N + 10];
- int main(){
- int nGirl;
- scanf("%d", &nGirl);
- for(int i = 1; i <= nGirl + 1; ++i){
- char facing = 'R';
- int cute = 0;
- bool isFacingR;
- if(i <= nGirl){
- scanf(" %c%d", &facing, &cute);
- if(facing == 'R'){
- isFacingR = true;
- } else if(facing == 'L'){
- isFacingR = false;
- }
- }
- for(int d = 0; d < 2; ++d){
- bool trDir = (d == 0);
- if(i == 1){
- if(isFacingR == trDir){
- dp[d][STT][1] = cute;
- dp[d][REV][1] = 0;
- } else {
- dp[d][REV][1] = cute;
- dp[d][STT][1] = 0;
- }
- dp[d][ALD][1] = 0;
- par[d][REV][1] = 1;
- par[d][ALD][1] = 0;
- continue;
- }
- int curr = i % 2;
- int prev = curr ^ 1;
- dp[d][STT][curr] = dp[d][STT][prev];
- if(dp[d][STT][prev] >= dp[d][REV][prev]){
- dp[d][REV][curr] = dp[d][STT][prev];
- par[d][REV][i] = i;
- } else {
- dp[d][REV][curr] = dp[d][REV][prev];
- par[d][REV][i] = par[d][REV][i - 1];
- }
- if(dp[d][REV][prev] > dp[d][ALD][prev]){
- dp[d][ALD][curr] = dp[d][REV][prev];
- par[d][ALD][i] = i - 1;
- } else {
- dp[d][ALD][curr] = dp[d][ALD][prev];
- par[d][ALD][i] = par[d][ALD][i - 1];
- }
- dp[d][STT][curr] += (isFacingR == trDir) ? cute : 0;
- dp[d][REV][curr] += (isFacingR != trDir) ? cute : 0;
- dp[d][ALD][curr] += (isFacingR == trDir) ? cute : 0;
- }
- }
- int last = (nGirl + 1) % 2;
- if(dp[0][ALD][last] >= dp[1][ALD][last]){
- printf("R %d %d %d", dp[0][ALD][last], par[0][REV][par[0][ALD][nGirl + 1]], par[0][ALD][nGirl + 1]);
- } else {
- printf("L %d %d %d", dp[1][ALD][last], par[1][REV][par[1][ALD][nGirl + 1]], par[1][ALD][nGirl + 1]);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement