此题关键是用存储空间去换取时间。否则老是超时。
在输入时就用一个vector《char》不断记录每一位时左边已经有的p,t。最后查找到a看对应位置左边的p个数,t个数,在求结果。
代码如下
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<char>::iterator ite;
int main(){
vector<char> vec;
vector<int> pleft, tleft;
char ch;
long long num = 0;
int p=0, t=0;//随手初始化!!!!!
while (ch = getchar()){
if (ch == '\n')
break;
if (ch == 'P'){
p++;
}
if (ch == 'T'){
t++;
}
pleft.push_back(p);
tleft.push_back(t);//pleft tleft vec 同时增长
vec.push_back(ch);
}
ite A = vec.begin();
while (A != vec.end()){
A = find(A, vec.end(), 'A');
if (A != vec.end()){
num += pleft[A - vec.begin()] * (t - tleft[A - vec.begin()]);
A++;
}
}
//这