zoukankan      html  css  js  c++  java
  • ZOJ 3985

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3985

    题意:

    给出一个长度为n的字符串,全部由'C'和'P'组成;

    then,可以在原有字符串的基础上添加任意多个’C’或’P’,每次添加一个就要花费一些 $value$,第 i 次添加所花费的 $value = i - 1$;

    在任意的地方只要组成”CCPC”就可以获得 1 单位的 $value$,问你到最后可以获得最多多少单位的 $value$。

    题解:

    观察一下就可以知道,任何添加两个及以上字符的行为都是没有价值增加的。

    所以,最多只需要增加一个字符(第一个字符是“免费”的字符)。

    先遍历把"CCPC"找出来,然后剩下去判断是否可以利用"CCC"或"CCP"或"CPC"来生成目标字符串"CCPC";

    另外, 由于找到的"CCC"有可能是"CCCPC"的前三个字符,那么如果添加一个字符"P",就变成"CCPCPC",这样显然会破坏一个原本就存在的"CCPC",

    这样的行为显然是不赚的,而且也会浪费你唯一一次免费字符的机会,所以还不如不加这个字符,所以遇到"CCC"时需要特判一下。

    AC代码:

    #include<bits/stdc++.h>
    using namespace std;
    
    int n;
    string str;
    
    int main()
    {
        int T;
        for(cin>>T;T;T--)
        {
            cin>>n>>str;
            int value=0;
            bool flag=0;
            for(int i=0;i<n;i++)
            {
                if(str.substr(i,4)=="CCPC")
                {
                    value++;
                    i+=2;
                    continue;
                }
                if(!flag)
                {
                    string tmp=str.substr(i,3);
                    if(tmp=="CCC" || tmp=="CCP" || tmp=="CPC")
                    {
                        if(tmp=="CCC" && str.substr(i+1,4)=="CCPC") continue; //特判
                        value++;
                        flag=1;
                    }
                }
            }
            cout<<value<<endl;
        }
    }
  • 相关阅读:
    mac 下webstorm调节字体大小
    js等于符号的详解
    js运算符相关要点
    js字符串相关要点
    js变量的相关要点
    JS中的let变量
    测试浏览器是否支持JavaScript脚本
    document.write的时机
    Valid Parentheses
    Remove Nth Node From End of List
  • 原文地址:https://www.cnblogs.com/dilthey/p/7788042.html
Copyright © 2011-2022 走看看