比赛 寒假集训5 评测结果 AAWWWAWWWW
题目名称 省选之后 最终得分 30
用户昵称 小福鑫 运行时间 0.031 s
代码语言 C++ 内存使用 3.69 MiB
提交时间 2026-03-01 11:05:54
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n,m,k,i,ans=INT_MAX,c,x,y,d;
string s,p,t,u;
vector<int>v[2];
signed main(){
    freopen("Toilets.in","r",stdin);
    freopen("Toilets.out","w",stdout);
	cin>>n>>m;
	if(n>10){
        cout<<"-1";
        return 0;
    }
	while(m--){
		cin>>u>>k;
		while(k--) s+=u;
	}
	for(i=0;i<s.size();++i){
	   v[s[i]=='M'].push_back(i); 
    }
	if(v[1].size()>n) {
		cout<<-1;
		return 0;
	}
	p=s;
	sort(p.begin(),p.end());
	do{
		t=p;
		int o=1;
		for(i=0;i<n;i++){
			char h=t[0];
			t.erase(0,1);
			if(h=='F'){
				if(t.size())t.erase(0,1);
				else o=0;
			}
            else{
				int f=t.find('F');
				if(f!=-1)t.erase(f,1);
				else o=0;
			}
			if(!o)break;
		}
		if(o){
			c=x=y=0;
			for(i=0;i<2*n;i++){
				if(p[i]=='F')d=v[0][x++];
				else d=v[1][y++];
				if(i>d)c=max(c,i-d);
			}
			ans=min(ans,c);
		}
	}while(next_permutation(p.begin(),p.end()));
	cout<<(ans==INT_MAX?-1:ans);
}