P8080 题解

· · 题解

学霸题,数杯架

更好の阅读体验。

\mathbf{sol}

这道题我们可以把普通座位和爱心座位的总数统计起来,然后判断是否有位置就可以了。大家听到这个方法可能会疑惑爱心座位什么判断,但爱心座位一定是双数,所以把统计的爱心座位除以二再加一就可以算出空隙了,普通座位不用进行任何判断,空隙就是原数。

如果您没有听懂,让我举个例子。

假设座位是 \mathbf{\color{green}{SS}\color{red}{LLLL}\color{green}{SS}},这里我给大家说一个大家常犯的误区,中间的四个 \mathbf{\color{red}L} 不代表他们四个人中间都没有杯架,而是他们之间两两划分,我用星号代表杯架,那中间部分就是 \mathbf{\color{black}{*}\color{red}{LL}\color{black}{*}\color{red}{LL}\color{black}{*}},所以我们可以推导出爱心座位的杯架数量为 love/2+1,我们得到爱心座位的杯架数量为 3,普通座位的数量为 4,所以总数为 7,我们用图表示一下,就是 \mathbf{\color{black}{*}\color{green}{S}\color{black}{*}\color{green}{S}\color{black}{*}\color{red}{LL}\color{black}{*}\color{red}{LL}\color{black}{*}\color{green}{S}\color{black}{*}\color{green}{S}\color{black}{*}}

\mathbf{ac\ code}

#include<bits/stdc++.h>
using namespace std;
int n,ss,ll;//ss为普通座位的数量,ll为爱心座位的数量。
char s;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>s;
        if(s=='S')ss++;//查询普通座位的数量。
        else ll++;//查询爱心座位的数量。
    }
    cout<<min(ss+(ll/2+1),n);//解释一下为什么要判断最小,因为在样例 1 的情况下杯架比人多,而我们要判断多少人能使用杯座。
    return 0;//华丽的结尾
}