请问这个代码哪里有问题呢
#include <bits/stdc++.h> using namespace std; const int N = 1e5+5; typedef long long ll; //const int MOD=1000000007; void get() { string s; cin>>s; ll len=s.size(); vector<ll>pre(len+1,0),lat(len+1,0),d(len+1,0); ll cnt=0; for(int i=0;i<len;i++){ pre[i]=cnt; if(s[i]=='u')cnt++; } cnt=0; for(int i=len-1;i>=0;i--){ lat[i]=cnt; if(s[i]=='u')cnt++; } for(int i=0;i<len;i++){ if(s[i]=='d'){ d[i]=pre[i]*lat[i]; //cout<<i<<' '<<d[i]<<endl; } } vector<ll> pre_ud(len,0),lat_du(len,0),u(len,0); for(int i=1;i<len;i++){ pre_ud[i]=pre_ud[i-1]; if(s[i]=='d')pre_ud[i]+=pre[i]; } for(int i=len-2;i>=0;i--){ lat_du[i]=lat_du[i+1]; if(s[i]=='d')lat_du[i]+=lat[i]; } for(int i=0;i<len;i++){ if(s[i]=='u'){ u[i]=pre_ud[i]+lat_du[i]; //cout<<i<<' '<<u[i]<<endl; } } int pos=0,Max=0; for(int i=0;i<len;i++){ if(s[i]=='u'&&u[i]>=Max) pos=i,Max=u[i]; if(s[i]=='d'&&d[i]>=Max) pos=i,Max=d[i]; } if(Max)s[pos]='a'; cout<<s<<endl; } int main() { ios::sync_with_stdio(0); cin.tie(0); int T=1; //cin>>T; while(T--) get(); return 0; }
全部评论
(3) 回帖