#32355: 求救


dfd8282@gmail.com (fishhh)

學校 : 嘉義市私立嘉華高級中學
編號 : 99760
來源 : [163.27.13.253]
最後登入時間 :
2024-04-12 13:39:58
c412. 四、多麼OwO(OwO) -- 板橋高中模擬賽 | From: [140.116.247.244] | 發表日期 : 2022-10-02 10:48

#include "iostream"
using namespace std;
int mod=1e9+7;
int pre[1000100],bt[1000100];
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    string s;
    int t;
    cin>>t;
    cin.ignore();
    while(t--){
        getline(cin,s);
        pre[0]=0;
        for(int i=1;i<=s.size();i++){
            if(s[i-1]=='O')pre[i]=pre[i-1]+1;
            else pre[i]=pre[i-1];
        }
        bt[s.size()+1]=0;
        for(int i=s.size();i>=1;i--){
            if(s[i-1]=='O')bt[i]=bt[i+1]+1;
            else bt[i]=bt[i+1];
        }
        int ans=0;
        for(int i=0;i<s.size();i++){
            if(s[i]=='w'){
                ans+=(bt[i+1]*pre[i+1])%mod;
                ans%=mod;
            }
        }
        cout<<ans<<"\n";
    }
}

我的想法就是做O的前後綴 然後對每個w相乘該位置的前後綴

 

 
#32416: Re: 求救


cges30901 (cges30901)

學校 : 不指定學校
編號 : 30877
來源 : [101.136.203.77]
最後登入時間 :
2024-04-07 15:34:14
c412. 四、多麼OwO(OwO) -- 板橋高中模擬賽 | From: [39.9.78.197] | 發表日期 : 2022-10-08 21:25

#include "iostream"
using namespace std;
int mod=1e9+7;
int pre[1000100],bt[1000100];
int main(){
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    string s;
    int t;
    cin>>t;
    cin.ignore();
    while(t--){
        getline(cin,s);
        pre[0]=0;
        for(int i=1;i<=s.size();i++){
            if(s[i-1]=='O')pre[i]=pre[i-1]+1;
            else pre[i]=pre[i-1];
        }
        bt[s.size()+1]=0;
        for(int i=s.size();i>=1;i--){
            if(s[i-1]=='O')bt[i]=bt[i+1]+1;
            else bt[i]=bt[i+1];
        }
        int ans=0;
        for(int i=0;i
            if(s[i]=='w'){
                ans+=(bt[i+1]*pre[i+1])%mod;
                ans%=mod;
            }
        }
        cout<
    }
}

我的想法就是做O的前後綴 然後對每個w相乘該位置的前後綴

 


這題記憶體很小,無法用這種方式(我是用fseek才AC的)

 
ZeroJudge Forum