1 条题解
-
1
#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
- 上传者