swun 项链

来源:互联网 发布:退货 淘宝客服不回 编辑:程序博客网 时间:2024/05/17 08:41

描述

给你一条项链(圆环),由N颗水晶珠组成。每颗水晶珠由C或J水晶组成。现在给你一个任务,如下:

       1.从项链的任意一个位置将项链切开,形成一条链;

       2.从形成的链的任意一头开始收集水晶珠;

       3.在满足手中的C水晶数要大于等于J水晶数的情况下,收集完所有的水晶珠;

最后,你的任务是数出切项链的方法有多少种,也就是说满足条件的位置有多少个。

输入

第一行输入测试实例的个数T(T<=10),接下来的T行,每行一个字符串S(2<=strlen(S)<=1000);

输出

    每个测试实例输出一行“Case x: d” x表示测试实例的数目(从1开始),d指切的方法有多少种。

样例输入

2
CJCJCJ
CCJJCCJJCCJJCCJJ

样例输出

Case 1: 6
Case 2: 8

简单的模拟题,从项链的任一端开始遍历,遇到C就+1,遇到J就-1,显然C要大于等于J,也就是结果要大于0,当结果小于0的时候就结束.....

 

#include<stdio.h>#include<string.h>int main(){    char str[1010];    int T,i,j,temp,ans,sum,z=1,k;    scanf("%d",&T);    while(T--){        scanf("%s",str);        ans=0;        int l1=strlen(str);        for(i=0;i<l1;i++){            temp=0;                k=0;            for(j=i;j<l1;j++){                if(str[j]=='C')    temp++;                if(str[j]=='J')    temp--;                if(temp<0)     break;            }            if(temp>=0){            for(j=0;j<i;j++){                             if(str[j]=='C') temp++;                if(str[j]=='J') temp--;                if(temp<0)       break;            }            }        if(temp>=0) {ans++;k=1;}        if(k==0){         //一个方向找不到,换另一个方向            temp=0;            for(j=i-1;j>=0;j--){                if(str[j]=='C')    temp++;                if(str[j]=='J')    temp--;                if(temp<0)     break;                                }            if(temp>=0){            for(j=l1-1;j>i;j--){                if(str[j]=='C')    temp++;                if(str[j]=='J')    temp--;                if(temp<0)     break;                        }            if(temp>=0) ans++;        }    }    }    printf("Case %d: %d\n",z++,ans);    }}


原创粉丝点击