40分求助

P2697 宝石串

whitrice @ 2023-02-18 09:53:19

代码:


#include<bits/stdc++.h>
using namespace std;
long long a[1000005],ans;
int main(){
    string s;
    cin>>s;
    int l=s.size();
    for(int i=0;i<l;i++){
        if(s[i]=='G'){
            a[i]=a[i-1]+(-1);
        }else{
            a[i]=a[i-1]+1;
        }
    }
    for(long long i=0;i<l;i++){
        for(long long j=i+1;j<l;j++){
            if(a[j]-a[i]==0){
                ans=max(ans,abs(i-j));
            }
        }
    }
    cout<<ans;
    return 0;
}

思路:G记为-1,R记为1,最后看哪两个前缀和相加得0且最长
WA:第3、5、6、7、8、9个点

by zhangjiahao @ 2023-02-18 11:04:24

你确定是WA而不是TLE吗


by zhangjiahao @ 2023-02-18 11:10:41

有没有一种可能是数组越界了

if(s[i]=='G'){
   a[i]=a[i-1]+(-1);
}else{
   a[i]=a[i-1]+1;
}

当i=0时a[i-1]……


by zhangjiahao @ 2023-02-18 11:14:26

@whitrice hey


by whitrice @ 2023-02-18 11:54:48

@zhangjiahao 不是TLE


by whitrice @ 2023-02-18 14:41:07

@zhangjiahao 不是数组越界,我改了以后还是四十分 代码:


#include<bits/stdc++.h>
using namespace std;
long long a[1000005],ans;
int main(){
    string s;
    cin>>s;
    int l=s.size();
    for(int i=0;i<l;i++){
        if(s[i]=='G'){
            if(i==0){
                a[i]+=-1;
            }
            a[i]=a[i-1]+(-1);
        }else{
            if(i==0){
                a[i]+=1;
            }
            a[i]=a[i-1]+1;
        }
    }
    for(long long i=0;i<l;i++){
        for(long long j=i+1;j<l;j++){
            if(a[j]-a[i]==0){
                ans=max(ans,abs(i-j));
            }
        }
    }
    cout<<ans;
    return 0;
}

by wangtianhao0609 @ 2024-09-22 16:19:47

@zhangjiahao \ 看不懂大佬的代码\ 我的代码如下

#include<bits/stdc++.h>
using namespace std;
string s,x;
int maxn;
bool pd(string a){
    int s1=0,s2=0;
    for (int i=0;i<a.size();i++)
    {
        if (a[i]=='R')
        {
            s1++;
        }
        else
        {
            s2++;
        }
    }
    if (s1==s2)
    {
        return true;
    }
    return false;
} 
int main(){
    cin >>s;
    for (int i=0;i<s.size();i++)
    {
        for (int j=i+2;j<s.size();j++)
        {
            x="";
            for (int k=i;k<=j;k++)
            {
                x+=s[k];
            }
            if (pd(x))
            {
                int y=x.size();
                maxn=max(y,maxn);
            }
        }
    }
    cout <<maxn;
    return 0;
}

by wangtianhao0609 @ 2024-09-22 16:21:49

此题因为样例水才过的,不然TLE


|