| 比赛 | 寒假集训5 | 评测结果 | AAWWEAETET |
|---|---|---|---|
| 题目名称 | 省选之后 | 最终得分 | 30 |
| 用户昵称 | ychyyx | 运行时间 | 2.715 s |
| 代码语言 | C++ | 内存使用 | 38.26 MiB |
| 提交时间 | 2026-03-01 10:58:33 | ||
#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
ll n,m;
string s,t;
ll k;
ll F,M;
int fa[100005],ma[100005];
bool b[100005];
ll ans=0;
int search(int i,char color){
int k=0;
for(int j=i+1;j<2*n;j++){
if(s[j]==color){
k=j;
break;
}
}
return k;
}
int main(){
freopen("Toilets.in","r",stdin);
freopen("Toilets.out","w",stdout);
scanf("%lld%lld",&n,&m);
for(int i=1;i<=m;i++){
cin>>t;
scanf("%lld",&k);
while(k--)
s+=t;
}
for(int i=0;i<2*n;i++){
if(s[i]=='F')
fa[++F]=i;
else
ma[++M]=i;
}
if(M>F){
printf("-1");
return 0;
}else if(M==F){
ll q=n-M;
for(int i=0;i<2*n;i++){
if(!b[i]){
b[i]=1;
if(s[i]=='F'){
if(s[i+1]=='F'){
k=search(i,'M');
if(k==0){
printf("-1");
return 0;
}
swap(s[i+1],s[k]);
ans=max(ans,k-i-1);
}
}else{
if(s[i+1]=='M'){
k=search(i,'F');
if(k==0){
printf("-1");
return 0;
}
swap(s[i+1],s[k]);
ans=max(ans,k-i-1);
}
}
b[i+1]=1;
}
}
}else{
ll q=n-M;
for(int i=0;i<2*n;i++){
if(!b[i]){
b[i]=1;
if(s[i]=='F'){
if(s[i+1]=='F'){
if(q>0){
q--;
}else{
k=search(i,'M');
if(k==0){
printf("-1");
return 0;
}
swap(s[i+1],s[k]);
ans=max(ans,k-i-1);
}
}
}else{
if(s[i+1]=='M'){
k=search(i,'F');
if(k==0){
printf("-1");
return 0;
}
swap(s[i+1],s[k]);
ans=max(ans,k-i-1);
}
}
b[i+1]=1;
}
}
}
printf("%lld",ans);
return 0;
}