pat 1040. 有幾個PAT

原題鏈接:
思路:用兩個數組分別統計從左到右P的數目和從右到左T的數目,最後針對每一個A,把左邊的P與右邊的T的數目相乘即爲當前位置的PAT數目,遍歷每一個A相加就是所求,詳見代碼

#include<bits/stdc++.h>
using namespace std;
const int maxn=100005;
const int mod=1000000007;
typedef long long ll;
string str;
ll Left[maxn],Right[maxn];
void solve(){
    cin>>str;
    memset(Left,0,sizeof(Left));
    memset(Right,0,sizeof(Right));
    ll ans=0;
    int num1=0,num2=0;
    for(int i=0;i<str.size();i++){
        if(str[i]=='P'){
            ++num1;
        }
        //從左到右P的數目
        Left[i]=num1;
    }
    for(int i=str.size()-1;i>=0;i--){
        if(str[i]=='T'){
            ++num2;
        }
        //從右到左T的shumu
        Right[i]=num2;
    }
    for(int i=0;i<str.size();i++){
        if(str[i]=='A'){
            //注意取餘,最開始寫成ans+=(Left[i]*Right[i])%mod;
            ans=(ans+(Left[i]*Right[i])%mod)%mod;
        }
    }
    cout<<ans<<endl;
}
int main(){
    //freopen("in.txt","r",stdin);
    solve();
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章