PAT basic 1040

来源:互联网 发布:seo什么意思 编辑:程序博客网 时间:2024/06/14 16:35
#include <iostream>#include <string>using namespace std;int main() {    string s;    cin >> s;    int len = s.length();    int result = 0;    int countp = 0;    int countt = 0;    for (int i = 0; i < len; i++) {        if (s[i] == 'T')            countt++;    }    for (int i = 0; i < len; i++) {        if (s[i] == 'P') countp++;        if (s[i] == 'T') countt--;        if (s[i] == 'A') {            result = (result + (countp * countt) % 1000000007) % 1000000007; //如果不取余的话 就会有几个测试点出错         }    }    cout << result;    return 0;}/*分析:要想知道构成多少个PAT,那么遍历字符串后对于每一A,它前面的P的个数和它后面的T的个数的乘积就是能构成的PAT的个数。然后把对于每一个A的结果相加即可~~辣么就简单啦,只需要先遍历字符串数一数有多少个T~~然后每遇到一个T呢~countt–;每遇到一个P呢,countp++;然后一遇到字母A呢就countt * countp~~~把这个结果累加到result中~~~~最后输出结果就好啦~~对了别忘记要对10000000007取余哦~~~~为什么要对1000000007取模大数阶乘,大数的排列组合等,一般都要求将输出结果对1000000007取模为什么总是1000000007呢= =大概????是因为:(我猜的,不服你打我呀~)1. 1000000007是一个质数2. int32位的最大值为2147483647,所以对于int32位来说1000000007足够大3. int64位的最大值为2^63-1,对于1000000007来说它的平方不会在int64中溢出所以在大数相乘的时候,因为(a?b)%c=((a%c)?(b%c))%c,所以相乘时两边都对1000000007取模,再保存在int64里面不会溢出*/