zoukankan      html  css  js  c++  java
  • PAT B1040 有几个PAT (25 分)

    字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。

    现给定字符串,问一共可以形成多少个 PAT

    输入格式:

    输入只有一行,包含一个字符串,长度不超过1,只包含 PAT 三种字母。

    输出格式:

    在一行中输出给定字符串中包含多少个 PAT。由于结果可能比较大,只输出对 1000000007 取余数的结果。

    输入样例:

    APPAPT
    

    输出样例:

    2
    #include <stdio.h>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    const int maxn = 100010, mod = 1000000007;
    char s[maxn];
    int p[maxn] = { 0 };
    int main() {
        
        int N,K,L=0;
        int count = 0;
        scanf("%s", &s);
        N = strlen(s);
        //printf("%d", N);
        for (int i = 0; i < N; i++) {
            if (i > 0) {
                p[i] = p[i - 1];
            }
            if (s[i] == 'P') {
                p[i]++;
            }
        }
        int ans = 0, numT = 0;
        for (int i = N - 1; i > 0; i--) {
            if (s[i] == 'T') {
                numT++;
            }
            else if (s[i] == 'A') {
                ans = (ans + p[i] * numT) % mod;
                //ans = ans % mod;
            }
        }
        
        
        
        printf("%d", ans);
        system("pause");
        return 0;
    }

    注意点:先统计每个位置上前面有多少个P,再从后往前遍历,遇到T就计数,遇到A就计算。如果再从尾到头遍历T而不是边遍历边计算,容易超时。

    ---------------- 坚持每天学习一点点
  • 相关阅读:
    【LeetCode】048. Rotate Image
    【LeetCode】036. Valid Sudoku
    【LeetCode】060. Permutation Sequence
    【LeetCode】001. Two Sum
    【LeetCode】128. Longest Consecutive Sequence
    【LeetCode】081. Search in Rotated Sorted Array II
    【LeetCode】033. Search in Rotated Sorted Array
    顺时针打印矩阵
    矩形覆盖
    二维数组中的查找
  • 原文地址:https://www.cnblogs.com/tccbj/p/10364690.html
Copyright © 2011-2022 走看看