tjut 3474

来源:互联网 发布:mac ssh客户端工具 编辑:程序博客网 时间:2024/06/10 22:31
#include <cstdio>  #include <cmath>  #include <cstring>  #define MAXN 1000005  #define min(a, b) ((a)<=(b)?(a):(b))    using namespace std;    int num[MAXN];  char ans[MAXN];  char s[MAXN];  int l[MAXN];  int r[MAXN];    void initx(int n)  {      l[1] = num[1];      for (int i = 2; i <= n; i++)          l[i] = min(l[i - 1], num[i]);      r[n] = num[n];      for (int i = n - 1; i >= 1; i--)          r[i] = min(r[i + 1], num[i]);  }    int main()  {      int t;      int ANS;      int lenx;      scanf("%d", &t);      for (int k = 0; k < t; k++) {          scanf("%s", s);          lenx = strlen(s);          memset(ans, 0, sizeof(ans));          ANS = 0;          num[0] = 0;          for (int i = 0; i < lenx; i++) {              if (s[i] == 'C') num[i + 1] = num[i] + 1;              else num[i + 1] = num[i] - 1;          }          initx(lenx);          if (l[lenx] >= 0) ans[0] = 1;          for (int i = 1; i < lenx; i++) {              if (r[i + 1] - num[i] >= 0 && num[lenx] - num [i] + l[i] >= 0) ans[i] = 1;          }          for (int i = 0; i < lenx; i++) {              if (s[lenx - i - 1] == 'C') num[i + 1] = num[i] + 1;              else num[i + 1] = num[i] - 1;          }          initx(lenx);          if (l[lenx] >= 0) ans[0] = 1;          for (int i = 1; i < lenx; i++) {              if (r[i + 1] - num[i] >= 0 && num[lenx] - num [i] + l[i] >= 0) ans[lenx - i] = 1;          }          for (int i = 0; i < lenx; i++) if (ans[i] == 1) ANS++;          printf("Case %d: %d\n", k + 1, ANS);      }      return 0;  }  

0 0
原创粉丝点击