An easy problem 思维

来源:互联网 发布:php输出js代码 编辑:程序博客网 时间:2024/06/05 11:34

Description

萌老师给Anonymous布置了数据结构课设作业――计算机博弈,Anonymous十分苦恼,于是她在纸上画棋盘来找灵感。这时她发现有一只蚂蚁落入了其中一个棋格里,现有一行只包括(U、D、L、R)四种字符的命令,U为上、D为下、L为左、R为右,现在Anonymous想知道这个命令中有多少子串(包括自身)能使蚂蚁回到原点

Input

第一行输入一个整数T,表示测试实例的数量;
对于每个实例,输入一个整数n(1<=n<=200),表示命令的长度,再输入一行长度为n仅包含(U、D、L、R)的字符串。

Output

对于每个实例,输出一个整数,表示满足要求的子串的数量。

Sample Input

1
6
URLLDR

Sample Output

2

Hint

题意

题解:

子串连续的 暴力来就行
开两组标记就可以了 每组标记的值之和为0

AC代码

#include <cstdio>#include <cstring>int lr[220],ud[220];int main(){        int t;        scanf("%d",&t);        while (t--){            memset(lr,0,sizeof(lr));            memset(ud,0,sizeof(ud));        int n;        scanf("%d",&n);        getchar();        char cc;        for (int i = 0; i < n; ++i){            scanf("%c",&cc);            if (cc =='L') lr[i]=-1;            else if (cc == 'R') lr[i]=1;            else if (cc == 'U') ud[i]=-1;            else if (cc== 'D') ud[i]=1;        }        int a,b;        int ans = 0;        for (int i = 0; i < n; ++i){            a = 0,b = 0;            for (int j = i; j < n; ++j){                a+=lr[j];                b+=ud[j];                if (a == 0 && b == 0) ans++;            }        }        printf("%d\n",ans);        }    return 0;}
原创粉丝点击