题意:一组男生女生在排队,每秒钟所有排在女生左边的男生与她相邻的女生交换位置,求女生全部换到男生前面的时间。
思路:
解法一:队伍最前面的那些女生不需要交换,后面的女生有两种状态:畅通无阻,前一个女生还没到达指定位置时到达前一个女生的下一个位置(被阻),花费时间分别为前面的男生数与前一个女生的时间+1。故从左边开始递推一遍。
#include<cstdio> #include<cstring> #include<iostream> using namespace std; char q[1000010]; int main() { gets(q); int len=strlen(q); int pos=0,pre=0,res=0; while(pos<len && q[pos]=='F') pos++; for(int i=pos;i<len;i++) { if(q[i]=='M') pre++; else res=max(res+1,pre); } printf("%d ",res); return 0; }