| 比赛 |
寒假集训5 |
评测结果 |
TATTTAEETE |
| 题目名称 |
省选之后 |
最终得分 |
20 |
| 用户昵称 |
张雨晴 |
运行时间 |
5.991 s |
| 代码语言 |
C++ |
内存使用 |
7.38 MiB |
| 提交时间 |
2026-03-01 11:32:10 |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
const int M=500005;
#define int long long
int n,m;
int fnum,mnum;
int bh[M];
int fans=4611686018427387904;
int a[M];
int cnt;
int ans[M];
int b[M];
void dfs(int k){
if(k>cnt){
// for(int i=1;i<=cnt;i++){
// cout<<ans[i]<<" ";
// }
// cout<<"\n";
for(int i=1;i<=cnt;i++){
// cout<<i<<"\n";
if(a[ans[i]]+a[ans[i+1]]==1){
i++;
continue;
}else if(a[ans[i]]+a[ans[i+1]]==2){
i++;
continue;
}
int j=i;
while(a[ans[j]]==0&&j<=cnt){
j++;
}
j--;
int num=j-i+1;
// cout<<"num:"<<num<<"\n";
if(j+num>cnt){
return ;
}
int flag=1;
for(int k=j+1;k<=j+num;k++){
if(a[ans[k]]!=1){
flag=0;
break;
}
}
if(flag==0){
// cout<<"不合法\n";
return ;
}
i=j+num;
}
int sum=0;
for(int i=1;i<=cnt;i++){
if(ans[i]>i){
// cout<<i<<" "<<ans[i]-i<<"\n";
sum=max(sum,ans[i]-i);
}
}
fans=min(fans,sum);
return ;
}
for(int i=1;i<=cnt;i++){
if(b[i]) continue;
if(a[i]==0&&mnum!=0){
ans[k]=i;
mnum--;
b[i]=1;
dfs(k+1);
mnum++;
b[i]=0;
}else if(a[i]==1&&fnum!=0){
ans[k]=i;
fnum--;
b[i]=1;
dfs(k+1);
fnum++;
b[i]=0;
}
}
}
signed main(){
freopen("Toilets.in","r",stdin);
freopen("Toilets.out","w",stdout);
cin>>n>>m;
for(int i=1;i<=m;i++){
string s;
int op;
cin>>s>>op;
for(int j=1;j<=op;j++){
for(int k=0;k<s.size();k++){
if(s[k]=='F'){
a[++cnt]=1;
bh[cnt]=cnt;
fnum++;
}else{
a[++cnt]=0;
bh[cnt]=cnt;
mnum++;
}
}
}
}
// cout<<fnum<<" "<<mnum<<"\n";
if(mnum>fnum){
cout<<-1;
return 0;
}
dfs(1);
cout<<fans;
return 0;
}