D 题通过92%,de不出bug
请问这个代码哪里有问题呢
#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;
}
查看5道真题和解析