#14172: TLE


qqqq123 (unknown)

學校 : 不指定學校
編號 : 79351
來源 : [140.113.92.245]
最後登入時間 :
2020-11-25 16:01:14
c440. Bert Love QQ ! | From: [163.27.3.92] | 發表日期 : 2018-06-21 10:50

有沒有辦法加速???

 

#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;
}

 
#14288: Re:TLE


james.liu841@gmail.com (小貓貓)

學校 : 國立交通大學
編號 : 67311
來源 : [140.113.127.204]
最後登入時間 :
2023-06-17 16:51:41
c440. Bert Love QQ ! | From: [36.226.34.115] | 發表日期 : 2018-07-10 22:17

有沒有辦法加速???

 

#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;

}

 

 
ZeroJudge Forum