1 条题解

  • 1
    @ 2022-7-14 19:46:53
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<map>
    #include<set>
    #include<map>
    #include<list>
    #include<queue>
    #include<stack>
    #include<vector>
    using namespace std;
    long long N;
    long long O,I2;
    long long n,sum,i; 
    long long maxs;
    string s,ss;
    int main()
    {
        cin>>n;
        cin>>s;
        for (i=0;i<n;i++)
        {
            if (s[i]=='I')I2++;
        }
        for (i=0;i<n;i++)
        {
            if (s[i]=='N')N++; 
            if (s[i]=='O')sum+=N*I2;
            if (s[i]=='I')I2--;
            maxs=max(maxs,N*I2);
        }
        //cout<<sum<<endl;
        /*for (i=0;i<n;i++) cout<<N[0][i]<<" "; cout<<endl;
        for (i=0;i<n;i++) cout<<I[0][i]<<" "; cout<<endl;
        for (i=0;i<n;i++) cout<<I[1][i]<<" "; cout<<endl;*/
        long long mmax=sum+maxs;//新增O 
        
        n++;//新增N 
        ss=s;//存原始串。 
        s='N'+ss;
        sum=0;
        N=0;I2=0;
        for (i=0;i<n;i++)
        {
            if (s[i]=='I')I2++;
        }
        for (i=0;i<n;i++)
        {
            if (s[i]=='N')N++; 
            if (s[i]=='O')sum+=N*I2;//求和
            if (s[i]=='I')I2--;
        }
        //cout<<sum<<endl;
        mmax=max(mmax,sum);
        //新增一个N
        
        
        //新增一个I
        s=ss+'I';
        sum=0;
        N=0;I2=0;//记得初始化!
        for (i=0;i<n;i++)
        {
            if (s[i]=='I')I2++;
        }
        for (i=0;i<n;i++)
        {
            if (s[i]=='N')N++; 
            if (s[i]=='O')sum+=N*I2;
            if (s[i]=='I')I2--;
        }
        mmax=max(mmax,sum);
        //cout<<sum<<endl;
        cout<<mmax;
        return 0;
    }
    
    • 1

    信息

    ID
    371
    时间
    1000ms
    内存
    125MiB
    难度
    3
    标签
    (无)
    递交数
    1
    已通过
    1
    上传者