pat 乙级 1040. 有几个PAT(25)

来源:互联网 发布:cmd查找他机mac 编辑:程序博客网 时间:2024/05/16 17:39



代码注释 很详细 :

 

#include <stdio.h>#include <iostream>#include <cstdlib>#include <cmath>#include <cctype>#include <string>#include <cstring>#include <algorithm>#include <ctime>using namespace std;char pat[100005];int dp_p[100005],dp_a[100005],dp_t[100005];int main() {                                                   // 思路 如下:                                                  //         A   P    P    A    P    T     gets(pat);                                        //  dp_p   0   1    2    2    3    3    (有几个P)    int len=strlen(pat);                              //  dp_a   0   0    0    2    2    2   (有几个PA)    if (pat[0]=='P') {                                //  dp_t   0   0    0    0    0    2   (有几个PAT)     dp_p[0]=1;                                   //  所以:    }                                                 // 若当前位置为P  dp_p[i] = dp_p[i-1] + 1    else dp_p[0]=0;                                   //           否则  dp_p[i] = dp_p[i-1]                                                      //    for (int i=1;i<len;i++) {                         // 若当前位置为A   dp_a[i] = dp_a[i-1] + dp_p[i-1]    if (pat[i]=='P') {                            //           否则  dp_a[i] = dp_a[i-1]    dp_p[i]=(dp_p[i-1]+1)%1000000007;         //     }                                             // 若当前位置为T   dp_t[i] = dp_t[i-1] + dp_a[i-1]    else dp_p[i]=(dp_p[i-1])%1000000007;          //           否则  dp_t[i] = dp_t[i-1]      }    dp_a[0]=0;     for (int i=1;i<len;i++) {    if (pat[i]=='A') {    dp_a[i]=(dp_a[i-1]+dp_p[i-1])%1000000007;    }    else dp_a[i]=(dp_a[i-1])%1000000007;    }    dp_t[0]=0;    for (int i=1;i<len;i++) {    if (pat[i]=='T') {    dp_t[i]=(dp_t[i-1]+dp_a[i-1])%1000000007;    }    else dp_t[i]=(dp_t[i-1])%1000000007;    }    cout<<dp_t[len-1];    return 0;}

提交代码:



原创粉丝点击