[PAT解题报告] Count PAT's

我出的题——也是简单题。数PAT的个数。
如果我们知道这个A之前有多少个P,则那些P和这个A一起可以构成这么多个PA。
如果我们知道这个T之前有多少个PA,则那些PA和这个T一起就可以构成这么多个PAT。
所以就是动态统计P, PA, PAT的个数。
遇到P, 则P的个数加1。
遇到A,则PA的个数加P的个数。
遇到T,则PAT的个数加PA的个数。
注意别忘记每次加法后取余数。
代码:

#include <cstdio>
#include <cstring>
#include <string>
#include <cctype>

using namespace std;


char s[100005];

const int M = 1000000007;

int main() {
int p = 0, pa = 0, pat = 0;
    scanf("%s",s);
    for (int i = 0; s[i]; ++i) {
        if (s[i] == 'P') {
            if (++p >= M) {
                p -= M;
            }
        }
        else if (s[i] == 'A') {
            if ((pa += p) >= M) {
                pa -= M;
            }
        }
        else if ((pat += pa) >= M) {
            pat -= M;
        }
    }
    printf("%d\n", pat);
    return 0;
}
原体链接: http://www.patest.cn/contests/pat-a-practise/1093
全部评论

相关推荐

MingoTree:看不出你你的技术栈,想找什么工作,然后课设项目别写上去了,自我评价删了,前后端你想好你要干啥,这种简历投上去秒挂的
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务