#include<bits/stdc++.h> using namespace std; int main() { char a[100010]; cin>>a; int t=0; for(int i=0;i<strlen(a);i++) { if(a[i]=='P') { for(int j=i+1;j<strlen(a);j++) { if(a[j]=='A') { for(int k=j+1;k<strlen(a);k++) { if(a[k]=='T') t++; } } } } } cout<<t<<endl; return 0; }时间优化
时间: 2024-02-10 11:08:28 浏览: 75
万能头文件#include&amp;lt;bits/stdc++.h&amp;gt; using namespace std;
这段代码是用来统计字符串中 PAT 数量的,时间复杂度为 O(n^3),可以进行以下优化:
1. 使用 scanf 代替 cin,可以提高读入速度。
2. 使用字符串长度变量代替每次调用 strlen 函数。
3. 将三重循环拆成两重循环,避免重复遍历。
4. 遇到 P 和 T 时,可以提前记录前面 A 的数量,避免重复计算。
下面是优化后的代码:
```c++
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main() {
char a[100010];
scanf("%s", a);
int t=0, len=strlen(a), cntP=0, cntT=0;
for(int i=0;i<len;i++) {
if(a[i]=='T') cntT++;
}
for(int i=0;i<len;i++) {
if(a[i]=='P') cntP++;
if(a[i]=='T') cntT--;
if(a[i]=='A') t=(t+cntP*cntT)%1000000007;
}
printf("%d\n",t);
return 0;
}
```
这个版本的时间复杂度为 O(n),可以通过本题。
阅读全文