题目:有几个PAT
我的代码:
#include<iostream>
#include<string>
using namespace std;
int main(){
string s;
cin>>s;
int a[10001] = {0},pnum = 0,tnum = 0,anum = 0;
long long count = 0;
for(int i = 0;i < s.size();i++){
if(s[i] == 'A') {a[anum] = i;anum++;}
}
for(int i = 0;i < anum;i++){
int j = 0,k=a[i]+1;
while(j < a[i]) {
if(s[j] == 'P') pnum++;
j++;
}
while(k < s.size()) { //可以加一个条件 pnum != 0
if(s[k] == 'T') tnum++;
k++;
}
count += (pnum*tnum);
pnum = 0,tnum = 0;
}
cout<<count % 1000000007;
}
参考代码:
链接:https://www.nowcoder.com/questionTerminal/5e7d025e91ab468f909cb93d431b89c3
来源:牛客网
#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
// 初始化变量
char c; int p=0, pa=0, pat=0;
// 统计
while(scanf("%c", &c) && c!=' ' && c!='\n') {
if(c == 'P') {
p++;
} else if(c == 'A') {
pa += p;
pa = pa%1000000007; //这里很妙
} else {
pat += pa;
pat = pat%1000000007;
}
}
printf("%d\n", pat);
return 0;
}
收获:自己写的用的是直接遍历,提示段错误,没找出原因。
参考代码中用的是动态规划,把问题划分为子问题去求解。