您的位置:首页 > 其它

G诺亚方舟 (GDUTACM——2015新生杯初赛重现)

2015-12-03 20:09 363 查看
题目链接:http://gdutcode.sinaapp.com/problem.php?cid=1025&pid=6

Problem G: 诺亚方舟

Description

“终有一天,耶和华的光会普照大地,旧的世界将会毁灭,新的世界将会产生。”——《启示录·天启》

2096年11月8日,世界末日终于还是来临了。

而此时,世界上最后一个“神”——sytrakl 也已经苏醒。他按照《圣经》的指引,找到了唯一能解救人类的“诺亚方舟”,并向全世界宣布任何人都可以进入方舟避难。

所有的人类知道消息后都疯狂了,他们纷纷赶来。由于怕触怒“神”,他们老老实实的在诺亚方舟的门前排起了队(方舟在队伍的最右边)。

sytrakl在英国的圣保罗大教堂沉睡了几百年,即使已经苏醒,却还保留着英国的“绅士风度”。所以虽然方舟的体积足够大,但他还是决定让女人先行(即所有女人都在队伍右边)。于是他规定:

每一秒时间里,队伍里所有右边有男人的女人跟右边的男人调换位置。

sytrakl希望知道需要多少时间才能实现目的。然而sytrakl无所不能,但偏偏不懂编程。所以他找到了你(高兴吧!Excited!),希望你能帮他完成这个工作。

Ps:如果做不到,那你肯定药丸。

Input

题目有多组输入。每组将给出一串长度为n的字符串(1<=n<=1000000),有两种字符,‘M’表示这是一个男人,‘W’表示这是一个女人。

Output

输出总共需要多少时间。

Sample Input

WWMMM
WWM
MMWWW

Sample Output

4
2
0

HINT

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<map>
using namespace std;
typedef long long LL;
const int INF = 1e9+7;
const int MAXN = 1000005;
char str[MAXN];
int dp[MAXN], wait[MAXN];
int main()
{

while(scanf("%s", str) != EOF)
{
int Pre = 0, cost = 0, ans = 0, flag = 0;
int len = strlen(str);
memset(dp, 0, sizeof(dp));
memset(wait, 0, sizeof(wait));
for(int i=0; i<len; i++)
{
if(str[i] == 'W')
{
flag = 1;
cost ++;
}
else if(flag)
{
if(Pre == 0)
{
dp[Pre] = cost;
wait[Pre] = 0;
}
else
{
if(wait[Pre-1] - cost >= 0)
wait[Pre] = wait[Pre-1] - cost + 1;
dp[Pre] = dp[Pre-1] - wait[Pre-1] + cost + wait[Pre];
}
cost = 0;
ans = max(ans, dp[Pre]);
Pre ++;
}
}

printf("%d\n", ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: