• codechef T2 Chef and Sign Sequences


    CHEFSIGN: 大厨与符号序列
    题目描述 大厨昨天捡到了一个奇怪的字符串 s,这是一个仅包含‘<’、‘=’和‘>’三种比较符号的字符串。 记字符串长度为 N,大厨想要在字符串的开头、结尾,和每两个字符之间插入一个正整数,共 N + 1 个数。大厨希望插入数字之后,这些比较符号所表达的含义是正确的。举个例子,如果 在‘<’前后分别插入 a 和 b,那么应当有 a < b。对于‘=’和‘>’也是类似的。 大厨可以在 [1,P] 中任意选择数字插入,同一个数也可以被插入到多个位置。 请你帮大厨计算 P 的最小取值可以是多少。
    输入格式
    输入的第一行包含一个整数 T,代表测试数据的组数。接下来是 T 组数据。 每组数据仅有一行,包含一个字符串 s。保证字符串仅包含‘<’、‘=’和‘>’三种字符。
    输出格式
    对于每组数据,输出一行,包含一个整数,代表 P 的最小取值。
    数据范围和子任务 • 1 ≤ T,N ≤ 105 • 1 ≤每组数据中 N 之和≤ 106 子任务 1(30 分): • 1 ≤ T,N ≤ 103 • 1 ≤每组数据中 N 之和≤ 104
    子任务 2(70 分): • 无附加限制
    样例数据
    输入 4 <<< <>< <=> <=<
    输出 4 2 2 3
    样例解释
    下面对于每组数据分别给出一种可行的插入整数的方案: • 1 < 2 < 3 < 4 • 1 < 2 > 1 < 2 • 1 < 2 = 2 > 1 • 1 < 2 = 2 < 3

    这道题其实就是计算连续的一段相同字符有多少就解决了 当然要考虑全是等于号的情况 这是答案是一

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    const int M=1e6+7;
    int read(){
        int ans=0,f=1,c=getchar();
        while(c<'0'||c>'9'){if(c=='-') f=-1; c=getchar();}
        while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=getchar();}
        return ans*f;
    }
    int T,sum[M],cnt;
    char s[M],c;
    int main()
    {
        T=read();
        while(T--){
            int mx=0,cnt=0;
            while((c=getchar())!='
    '&&c!=EOF) if(c!='=') s[++cnt]=c;
            if(!cnt){printf("1
    "); continue;}
            for(int i=1;i<=cnt;i++){
                if(s[i]==s[i-1]) sum[i]=sum[i-1]+1;
                else sum[i]=2;
                mx=max(mx,sum[i]);
            }
            printf("%d
    ",mx);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    k-d tree
    K近邻算法-KNN
    ORB特征提取与匹配
    ZeroMQ一个更小、更快、更简单的智能传输层协议
    ROS导航之参数配置和自适应蒙特卡罗定位
    cmake实战第二篇:让我们的代码更像个工程
    gcc/g++实战之动态链接库与静态链接库编写
    gcc/g++ 实战之编译的四个过程
    通过 LPeg 介绍解析表达式语法(Parsing Expression Grammars)
    Forth 语言概要
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7150771.html
Copyright © 2020-2023  润新知