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())!='\n'&&c!=EOF) if(c!='=') s[++cnt]=c;
        if(!cnt){printf("1\n"); 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\n",mx);
    }
    return 0;
}
View Code

 

posted @ 2017-07-11 15:26  友人Aqwq  阅读(203)  评论(0编辑  收藏  举报