美文网首页
1040 有几个PAT (25分)

1040 有几个PAT (25分)

作者: km15 | 来源:发表于2020-02-07 13:06 被阅读0次

    题意:
    1、给出一个字符串,统计有多少个PAT,也就是找出A左边的P,右边的T,然后P的个数乘以T的个数

    解题:
    1、设置一个变量,统计P的个数
    2、设置另一个变量,统计T的个数
    3、最后直接相乘即可

    learn && wrong:
    1、懂了为什么左边不是直接复制右边了,因为左边一开始就有个A,根本过不去,所以只能答案那招,累计左右
    If>0,先让他们相等,再一个if,累加P个数
    2、T其实也可以这样做,但是答案简化了,直接给一个变量累加,遇到相乘并加上ans即可
    3、--i没编译错误,但就是不输出,我尼玛
    4、中间的A可能是有多个的,所以ans需要累加,虽然A多个,但左右P和T的个数不变,所以只需要遇到A,相乘就可以了

    #include <iostream>
    #include <cstring>
    using namespace std;
    /* run this program using the console pauser or add your own getch, system("pause") or input loop 
    
    */
    
    const int maxn = 100010;
    const int MOD = 1000000007;
    char str[maxn]; 
    int leftnump[maxn] = {0};//左边每一位含有P的个数 
    int main(int argc, char** argv) {
        cin>>str;
        int len = strlen(str);
        
        //统计左边P的个数 
        int j; 
        for(j = 0;j < len;++j){
            if(j > 0){
                leftnump[j] = leftnump[j - 1];
            }   
            if(str[j] == 'P'){
                leftnump[j]++;
            } 
        } 
        
        int right_Tnum = 0;
        int ans = 0; 
        for(int i = len - 1;i >= 0;--i){
            if(str[i] == 'T'){
                right_Tnum++;
            }else if(str[i] == 'A'){
                ans = (ans + right_Tnum * leftnump[i]) % MOD;
                
            }
        } 
        
        cout<<ans<<endl; 
        return 0;
        
    }

    相关文章

      网友评论

          本文标题:1040 有几个PAT (25分)

          本文链接:https://www.haomeiwen.com/subject/yjlmxhtx.html