有沒有辦法加速???
#include <iostream>
using namespace std;
int main()
{
string s;
while(cin>>s)
{
long long int ans=0;
for(int i=0;i<s.size();i++)
if(s[i]=='Q')
for(int j=i+1;j<s.size();j++)
if(s[j]=='A')
for(int k=j+1;k<s.size();k++)
if(s[k]=='Q')
ans++;
cout<<ans<<endl;
}
return 0;
}
有沒有辦法加速???
#include
using namespace std;
int main()
{
string s;
while(cin>>s)
{
long long int ans=0;
for(int i=0;i<s.size();i++)
if(s[i]=='Q')
for(int j=i+1;j<s.size();j++)
if(s[j]=='A')
for(int k=j+1;k<s.size();k++)
if(s[k]=='Q')
ans++;
cout<<ans<<endl;
}
return 0;
}
你只要計算每個A左右各有幾個Q然後左右相乘就好了
// AC (12ms, 532KB)
#include <iostream>
#include <regex>
using namespace std;
int main(void) {
regex reg("[^QA]");
string str;
cin >> str;
str = regex_replace(str, reg, "");
uint64_t i, ans = 0, len = str.size(), Q_right = count(str.begin(), str.end(), 'Q'), Q_left = 0;
for (i = 0; i < len; i++) {
if (str[i] == 'Q') {
Q_left++;
Q_right--;
} else {
ans += Q_left * Q_right;
}
}
cout << ans << '\n';
return 0;
}