Press the / atcoder and rock paper (AtCoder-2141)

Problem Description

AtCoDeer the deer and his friend TopCoDeer is playing a game. The game consists of N turns. In each turn, each player plays one of the two gestures, Rock and Paper, as in Rock-paper-scissors, under the following condition:

(※) After each turn, (the number of times the player has played Paper)≦(the number of times the player has played Rock).

Each player's score is calculated by (the number of turns where the player wins) − (the number of turns where the player loses), where the outcome of each turn is determined by the rules of Rock-paper-scissors.

(For those who are not familiar with Rock-paper-scissors: If one player plays Rock and the other plays Paper, the latter player will win and the former player will lose. If both players play the same gesture, the round is a tie and neither player will win nor lose.)

With his supernatural power, AtCoDeer was able to foresee the gesture that TopCoDeer will play in each of the N turns, before the game starts. Plan AtCoDeer's gesture in each turn to maximize AtCoDeer's score.

The gesture that TopCoDeer will play in each turn is given by a string s. If the i-th (1≦i≦N) character in s is g, TopCoDeer will play Rock in the i-th turn. Similarly, if the i-th (1≦i≦N) character of s in p, TopCoDeer will play Paper in the i-th turn.

Constraints

  • 1≦N≦105
  • N=|s|
  • Each character in s is g or p.
  • The gestures represented by s satisfy the condition (※).

Input

The input is given from Standard Input in the following format:

s

Output

Print the AtCoDeer's maximum possible score.

Example

Sample Input 1

gpg

Sample Output 1

0
Playing the same gesture as the opponent in each turn results in the score of 0, which is the maximum possible score.

Sample Input 2

ggppgggpgg

Sample Output 2

2
For example, consider playing gestures in the following order: Rock, Paper, Rock, Paper, Rock, Rock, Paper, Paper, Rock, Paper. This strategy earns three victories and suffers one defeat, resulting in the score of 2, which is the maximum possible score.

Title:

Two people play stone scissors, one person gives stone and one person gives cloth, winning points, losing points, even but not scoring, now we know the steps of the other party's giving stone and cloth, each time we give a stone and cloth, we need to ensure that the current number of times the stone has been given is greater than the number of times the cloth has been given, ask the final score

Train of thought:

The simulation is enough. It should be noted that since each round needs to be compared, the count of stone and cloth in the first round is 0, so the stone must be put out for the first time, and then we can know whether the cloth can be put out according to the number of times the stone is put out

Source Program

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define EPS 1e-9
#define PI acos(-1.0)
#define INF 0x3f3f3f3f
#define LL long long
const int MOD = 1E9+7;
const int N = 1000000+5;
const int dx[] = {0,0,-1,1,-1,-1,1,1};
const int dy[] = {-1,1,0,0,-1,1,-1,1};
using namespace std;

string str;
int main() {
    cin>>str;
    int len=str.size();

    int g=0,p=0;
    int res=0;
    for(int i=0; i<len; i++){
        if(str[i]=='g'){
            if(p<g){
                res++;
                p++;
            }
            else
                g++;
        }
        else{
            if(p>g){
                g++;
                res--;
            }
            else
                p++;
        }
    }
    printf("%d\n",res);
    return 0;
}

 

Posted on Wed, 06 Nov 2019 11:57:38 -0500 by csj16