问题标题: 酷町堂:4466 啊!!!

0
0
已解决
汤启恩
汤启恩
新手光能
新手光能

想了30分钟了还是不对

50分错误代码:

#include<bits/stdc++.h>
using namespace std;
int b[1001],maxx;
int main(){
    int n;
    string s;
    cin>>n;
    getline(cin,s);
    getline(cin,s);
    for(int i=0;i<n;i++){
        int cnt=1;
        if(s[i]==s[i+1]){
            while(s[i]==s[i+1]){
                i++;
                cnt++;
            }
            maxx=max(cnt,maxx);
            b[s[i]]=max(b[s[i]],cnt);
        }
    }
    for(int i=0;i<n;i++){
        if(b[s[i]]==maxx){
            cout<<s[i]<<" ";
            b[s[i]]=0;
        }
    }
    cout<<endl<<maxx;
    return 0;
}

 

汤启恩在2020-11-09 21:29:23追加了内容

??????????????????????????


0
已采纳
陈振轩
陈振轩
高级光能
高级光能

这题不是在字符串模拟上讲过吗(

思路:
用桶的思想和字符串模拟的解题方法来写

遍历字符串(从1开始 f[0]初值为1)
遇到与前一个字符串相同的字符
f[i]++
否则
f[i]=0
顺便判断一下f[i]是否大于Max 大于的话就赋值

然后用桶的思想
再次遍历字符串
判断是否与Max相等,且桶[s[i]]为0(设桶的所有元素初值为0)
输出此字符且把桶[s[i]]的值设为1

最后输出换行符和Max即可AC

 

0
0
0
0
0
李显晨
李显晨
中级启示者
中级启示者

核心代码:

for(int i=1;i<=n;i++){
        if(a[i]==a[i-1]) f[i]=f[i-1]+1;
        else f[i]=1;
        maxn=max(maxn,f[i]);
    }
    for(int i=1;i<=n;i++){
        if(f[i]==maxn&&b[a[i]]!=0){
            cout<<a[i]<<" ";
            b[a[i]]=0;
        }
    }

定义:

char a[1005];
int f[1005],b[200],maxn,n;

输入以及桶计数:

cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        b[a[i]]++;
    }

最后在输出换行和maxn(前后顺序不要搞反)

我要回答