• 洛谷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())!='
    '&&s[lenk]!=EOF)lenk++;
        s[lenk]='';
        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;
    }

     我可能写的不好,如果有问题,请帮忙指出,谢谢。

  • 相关阅读:
    Makefile 之 $(Q)
    LeetCode-50-Pow(x, n)
    LeetCode-49. Group Anagrams
    全排列问题全面解析
    LeetCode-47. Permutations II
    LeetCode-46. Permutations
    LeetCode-43. Multiply Strings
    LeetCode-40. Combination Sum II
    LeetCode-39. Combination Sum
    LeetCode-36. Valid Sudoku
  • 原文地址:https://www.cnblogs.com/sy666/p/12775283.html
Copyright © 2020-2023  润新知