思路好题
对于一个女孩,设前一个女孩运动时间为0,如果她在停止运动前能追上前面的女孩,则运动时间为ans+1;否则她一直在男生交换位置,运动时间为cnt,cnt为前面男生个数。则这个女孩的运动时间为max(ans+1,cnt)。最终答案为最后一个女孩运动时间。
看完题解的我内牛满面…
#include<iostream> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define F(i,j,n) for(int i=j;i<=n;i++) #define D(i,j,n) for(int i=j;i>=n;i--) #define ll long long #define maxn 1000005 using namespace std; int n,t=1,ans,cnt; char s[maxn]; int main() { scanf("%s",s+1); n=strlen(s+1); while (t<=n&&s[t]=='F') t++; F(i,t,n) { if (s[i]=='M') cnt++; else ans=max(ans+1,cnt); } printf("%d\n",ans); return 0; }
原文:http://blog.csdn.net/aarongzk/article/details/51138652