C++,codeforces,2072B,B. Having Been a Treasurer in the Past, I Help Goblins Deceive

/*
codeforces,2072B,B. Having Been a Treasurer in the Past, I Help Goblins Deceive
用一个字符串表示金额,金额数量为字符串的不同的子序列中"-_-"的个数
子序列是从字符串中删除若干个字符(可以是0个)后得到的字符串,
删除不同的字符得到的子序列被定义为两个不同的子序列
给一个由'-'和'_'组成的字符串
问将字符串重新排列后,能得到的最大金额是多少
输入
t //测试案例数,每个案例占两行
n //第一行为字符串长度
-__-_-- //第二行为字符串
*/


/*
一个字符串的金额最大时,其中的'_'字符在字符串最中间,'-'字符平均地分布在两端
即"---___----"的形式是金额最大的形式
最大金额为中间'_'的数量乘以左边'-'的数量再乘以右边'-'的数量
*/
#include <iostream>
#include <string>
#include <algorithm>
void solve(){
    long long n;std::cin>>n;
    std::string price;std::cin>>price;
    //统计'_'的数量
    long long mouth = std::count(price.begin(),price.end(),'_');
    //计算'-'的数量
    long long eye = n-mouth;
    //eye/2是左边'-'的数量,eye/2+(int(eye%2!=0))是右边'-'的数量
    std::cout<<mouth*(eye/2)*(eye/2+(int(eye%2!=0)) )<<std::endl;
}
int main(){
    int t;std::cin>>t;
    while(t--){
        solve();
    }
}
posted @ 2025-02-27 13:11  Kazuma_124  阅读(31)  评论(0)    收藏  举报