2022春PAT甲级第一题 Simple Lie Detection (20 分)

2022春PAT甲级第一题 Simple Lie Detection (20 分)

题目大意:
背景是要测谎,有N 个多选题, 回答有8 个选项 a-h,如果答案的积分超过阈值T,则输出积分和"!!!",不超过阈值就输出积分。

规则:

  • f :开头 -2
  • a :结尾 -1
  • 每个最长的相同字母的串的长度大于 5 :积分+3
  • a 后面是 e 或 h :积分-4
  • 每个最长的连续增长的串的长度大于 3 :积分+5

输入:
N:问题的个数,T:阈值,K :测试者个数,接下来是K行长度为 N 的字符串 string。

输出:
如果答案的积分超过阈值T,则输出积分和"!!!",不超过阈值就输出积分。

#include<bits/stdc++.h>
using namespace std;

int N, T, K;

int main() {
    cin >> N >> T >> K;
    for (int i = 0; i < K; i++) {
        string str;
        cin >> str;
        int sum = 0;
        if (str[0] == 'f') {
            sum -= 2;
        }
        if (str[str.length() - 1] == 'a') {
            sum -= 1;
        }
        int maxS = 0,tS=1;
        int maxL=0, tL = 1;
        char t=str[0];
        for (int j = 1; j < str.length();j++) {
            // 对字符串字符进行遍历
            if (str[j] == t) {
                tS++;
            }
            else {
                // 字母不再重复
                // 重复字母长度大于5
                if (tS > 5)sum += 3;
                tS = 1;
                t = str[j];
            }
            if (str[j-1] == 'a' && (str[j] == 'e' || str[j] == 'h')) {
                sum -= 4;
            }
            if (str[j] == str[j - 1] + 1) {
                // 如果出现'abc'连续增长
                tL++;
            }
            else {
                if (tL > 3) {
                    sum += 5;
                }
                tL = 1;
            }
        }
        // 到末尾处判断重复和连续增长的情况
        if (tS > 5)sum += 3;
        if (tL > 3) {
            sum += 5;
        }
        cout << sum;
        if (sum > T) {
            cout << "!!!" ;
        }
        cout << endl;
    }
    return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值