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里面不会溢出*/
阅读全文
0 0
- PAT basic 1040
- PAT Basic
- Pat(Basic Level)Practice--1040(有几个PAT)
- PAT(basic level) 1040 有几个PAT(25)
- PAT (Basic Level) Practise
- PAT Basic 1001
- PAT Basic 1002
- PAT Basic 1005
- PAT Basic 1006
- PAT Basic 1007
- PAT Basic 1008
- PAT Basic 1009
- PAT Basic 1010
- pat basic level 1016
- pat basic level 1018
- pat basic level 1019
- PAT(basic level)题解
- PAT basic 1004 : 成绩排名
- Brackets(POJ
- 文章标题
- oracleday20(游标 分页 分页的扩展 让分页的构成更加实用 视图)
- POJ-1258-Agri-Net [最小生成树]
- spring mvc转发
- PAT basic 1040
- Masonry1.0.2 源码解析
- AngularJs学习之路(十一)
- SAP BC 系列教程(BC400至BC680)…
- NACE 配置PO PR等打印对…
- 取EKPO-MWSKZ税码对应的税率
- 销售订单SO保存校验的用户出口增强
- PAT basic 1041
- 发送端IDOC状态03 绿灯 …