洛谷P2697 宝石串
题目链接:https://www.luogu.com.cn/problem/P2697
题目描述
有一种宝石串,由绿宝石和红宝石串成,仅当绿宝石和红宝石数目相同的时候,宝石串才最为稳定,不易断裂。安安想知道从给定的宝石串中,可以截取一段最长的稳定的宝石串,有多少颗宝石组成。请你帮助他。
绿宝石用‘G’表示,红宝石用‘R'表示。
输入格式
一行由G和R组成的字符串
输出格式
最长的稳定的宝石串有多少颗宝石组成
输入输出样例
输入 #1
GRGGRG
输出 #1
4
说明/提示
RGGR为答案。
宝石数<=1000000
这是一道贪心题,要求出从1到i之间G比R多的个数然后再用数组记录下对应最小的i的最的大的i,最后在算出最大i和最小i的差的最大值即为答案。
代码:
#include<stdio.h> #include<string.h> #include<malloc.h> struct node{ int b,e,f; }; char s[1000001]; int r=0,maxx=0; int main(){ struct node*k=(struct node*)malloc(24000012),*a=k+1000000; memset(k,0,24000012); int lenk=0; while((s[lenk]=getchar())!='\n'&&s[lenk]!=EOF)lenk++; s[lenk]='\0'; a[0].b=0;a[0].f=1; for(int i=0;i<lenk;i++){ if(s[i]=='G')r++;else r--; if(a[r].f==0){a[r].b=i+1;a[r].f=1;} a[r].e=i+1; } for(int i=-lenk;i<=lenk;i++)if(a[i].e-a[i].b>maxx)maxx=a[i].e-a[i].b; printf("%d",maxx); free(k); return 0; }
我可能写的不好,如果有问题,请帮忙指出,谢谢。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步