P10994题解

· · 题解

题目大意

有一个讲座,一共有 a 个老师和 b 个学生报名,给你了一串字符串 s,代表每个座位的类型,如果 s_{i} 是 S 就代表这个座位是给学生坐的;反之,如果 s_{i} 是 T 则代表这个座位是给老师做的,但是老师或学生的座位可能不够坐,所以让你进行以下两个操作之一:

问最少要经过多少次操作才能使老师和学生都够坐。特别的,如果无论怎么修改,都无法让所有人有座位,则输出 -1。

题解思路

统计学生总座位数和老师总座位数,对比有多少学生和老师,如果学生或老师不够坐,则直接拿学生或老师的总人数减去总座位数,就是要操作的次数,如果全部座位小于人数,输出 -1。

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s;
    int te=0,st=0,a,b;//te表示老师座位数,st表示学生座位数
    cin>>a>>b;
    cin>>s;
    for(int i=0;i<s.length();i++){
        if(s[i]=='S'){
            st++;
        }else if(s[i]=='T'){
            te++;
        }
    }
    if(st+te<a+b){
        cout<<-1;
    }else if(st>=a&&te>=b){
        cout<<0;//全部够坐输出0
    }else if(st<a){
        cout<<a-st;
    }else{
        cout<<b-te;
    }
}