D - AtCoDeerくんと変なじゃんけん / AtCoDeer and Rock-Paper

Problem Statement

AtCoDeer the deer and his friend TopCoDeer is playing a game. The game consists of NN turns. In each turn, each player plays one of the two gesturesRockand 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 NN 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 ss. If the ii-th (1≦i≦N)(1≦i≦N) character in ss is g, TopCoDeer will play Rock in the ii-th turn. Similarly, if the ii-th (1≦i≦N)(1≦i≦N) character of ss in p, TopCoDeer will play Paper in the ii-th turn.

Constraints

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

Input

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

ss

Output

Print the AtCoDeer's maximum possible score.


Sample Input 1 Copy

Copy

gpg

Sample Output 1 Copy

Copy

0

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


Sample Input 2 Copy

Copy

ggppgggpgg

Sample Output 2 Copy

Copy

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 22, which is the maximum possible score.

题意:

你和对手进行石头布游戏,赢了的一分输了减一分。已知对手每次出什么(p-->布,g-->石头)同时还要保证进行到每一轮你出石头的总数大于等于你出布的总数。问你最多能的多少分。

思路:

模拟+贪心;

代码:
 

#include<bits/stdc++.h>
using namespace std;
char s[100009];
int main()
{
    int sg=0;
    int sp=0;
    int sum=0;
    scanf("%s",&s);
    int n=strlen(s);
    for(int i=0;i<n;i++)
    {
        if(sg==sp)
        {
            sg++;
            if(s[i]=='p')
            {
                sum--;
            }
        }
        else if(sg>sp)
        {
            if(s[i]=='g')
            {
                sp++;
                sum++;
            }
            else if(s[i]=='p')
            {
                sp++;
            }
        }

    }
    cout<<sum<<endl;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值