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