zoukankan      html  css  js  c++  java
  • B. Vova and Trophies

    题目原址

    http://codeforces.com/contest/1082/problem/B

    题目内容

    给定一个包含GS字母的字符串,要求只允许进行一次GS交换,求所得最大连续G串长度。

    题目解析

    就是找在给定字符串s中,只间隔一个S的两个G串的最大长度。因为这中间的一个S可以被其他G换过来从而使得两个G串相连,成为最大连续G串。

    注意:换过来的那个G可能来自于一个无关G串,也有可能只能来自本身的两个G串,因此还需要判断在交换后是否会获得长度收益。

    举个例子,像SSSGGSGGS这样的字符串进行交换后最大长度 = 两串长度之和,而GSSGGSGG这样的字符串交换后最大长度 = 两串长度+1。

    因此,除了寻找最大间隔串以外,还需对总体计数,如果两串之和 = 串中G的数量,则交换后没有收益,即

    ans=min(ans,sum);

    仔细回想一下如何寻找结果的。

    遍历s串,先记录第一个连续的G串的长度,倘若遇到S则将结果先交给temp,然后重新记录第二个连续G串的长度,在遇到下一个S之前,ans内存储的就是这两个连续串的长度之和再+1交换收益(假设有的话)。

    int sum = 0, g = 0, temp = 0, ans = 0;
        for(int i = 0; i < n; i++)
        {
            if(s[i] == 'G')
            {
                sum++; g++;
            }
            else
            {
                temp = g; g = 0;
            }
            ans=max(ans,temp+g+1);
        }

    题目总结

    反复回顾本题,就会逐渐学会字符串搜索之类的题目。

    另:题官方的标签中给出了Greedy algorithm(贪婪算法)。

    For you, Xh.
  • 相关阅读:
    mysql 函数在源码中的定义
    mydumper工作原理 :myownstars专家
    drop table big_table 调试
    debugfs恢复文件
    Linux内核里的DebugFS
    在Linux环境中使用Ext3文件系统
    strace
    通过blktrace, debugfs分析磁盘IO
    block_dump观察Linux IO写入的具体文件(mysqld)
    Centos下的IO监控与分析
  • 原文地址:https://www.cnblogs.com/Little-Rabbit/p/10066466.html
Copyright © 2011-2022 走看看