题解
2023-10-31 18:56:47
发布于:浙江
105阅读
0回复
0点赞
关于第一个和最后一个测试点是不是有问题?为什么都是80分(包括我和其他4个人)
这道题较难,要每次把剩下的字符串从左到右遍历,发现第一个比后面字符小的字符直接删掉就是最大字典序。
遍历之后的string变量用c_str()复制到数组内,然后查询数组内还有没有a,如果有,直接输出,没有就继续。
每次循环都要存储每次结束后a的数量,输出时第一行输出s+1,第二行输出后再输出个0.
code:
#include<bits/stdc++.h>
using namespace std;
int n,ans1[20001];
char lsb[10001];
string removeChar(string str) {
int n=str.length();
int i;
for (i=0;i<=n-2;i++) {
if (str[i] < str[i + 1]) {
break;
}
}
str.erase(i, 1);
return str;
}
int main(){
bool flag=false;
cin>>n;
string s;
cin>>s;
int nsb=s.length();
for (int i=0;i<nsb;i++) {
if (s[i]=='a') {
flag=true;
}
}
if(flag==false){
cout<<0<<endl<<0;
return 0;
}
int k=n,ans=0;;
for(int i=1;i<=n;i++){
int t=0;
k--;
string sr=removeChar(s);
s=sr;
const char* ptr = s.c_str();
strcpy(lsb, ptr);
for(int j=0;j<=k-1;j++) if(lsb[j]=='a') t++;
if(t!=0) ans1[i]=t;
else{
cout<<ans+1<<endl;
break;
}
ans++;
}
for(int i=1;i<=ans;i++) cout<<ans1[i]<<" ";
cout<<0;
return 0;
}
别忘了加入我的团队!
中国
全部评论 1
目前这道题已经修改好了。
2024-03-22 来自
0昨天刚修复的
2024-03-22 来自
0都多久以前的了……现在才修……
2024-03-24 来自 浙江
0(因为我昨天才看到这个帖子,然后就去修了
2024-03-24 来自 浙江
0
有帮助,赞一个