题目链接:

http://acm.hust.edu.cn/vjudge/problem/48421

Binary Tree

Time Limit: 3000MS
#### 问题描述
> Binary Tree is a tree data structure where each node has at most two children, usually they are
> distinguished as left and right child. And the node having the children are called parent of those
> children.
> An instruction string is a string consisting of the letters L, R and U. L stands for Left, R for Right
> and U for Up. Meaning of these will be clear shortly.
> One day I have drawn an infinitely large Binary Tree. In this tree each node has exactly two
> children (left child and right child) and each of them has a parent. For this problem, we will consider
> the parent of the root is root itself. I put a pen in the root and follow the instruction string S.
> That is, we look at the first character if it says L we go to left child, if it says R we go to right child
> and if it says U then to the parent. If we receive a U instruction at root we just end up at root since we
> assumed parent of the root is root itself.
> Now we have another instruction string T. Starting from the node where we are after following the
> instruction string S, we will follow the instruction string T. But this time, if we wish we may skip any
> instruction in the string T (possibly discarding all of them). You have to tell me how many different
> nodes I can end up after following instruction string T (skipping as many instructions as I wish).
> For example:
> Suppose: S = L and T = LU. Our answer is 3. Following S we will end up at the left child of the
> root. Now, when we follow T, there may be 4 cases:
> i Skipping all letters: we will be at the same node where we are.
> ii Skipping L and following U: we will be at the root.
> iii Following L and skipping U: we will be at the left child of current node.
> iv Following both L and U: we will be at the same node as in case i.
> Since 3 different nodes we can end up after following T, the answer is 3.

输入

First line of the test file contains an integer N (≤ 20) denoting number of test cases. Hence follow N

test cases. Each test case consists of two non empty strings. First line will contain instruction string S

and the second line will contain the instruction string T. You may assume that there will not be any

letter other than L, R or U in these strings. Length of the strings will not be greater than 100000.

输出

For each test case print the case number followed by the number of nodes we can end up finally. Since

the answer may be large, you have to give the answer modulo 21092013.

样例

sample input

2

L

LU

L

L

sample output

Case 1: 3

Case 2: 2

题解

首先我们考虑只有LR,没有U的情况:

我们定义三个计数变量:ans=1,l=1,r=1;

其中ans为答案,l表示当前局势下,往左走一步能够访问到的新节点;r表示当前局势往右走一步能够访问到的新节点。

如果现在的输入是'L',那么显然会有ans+=l。并且不会影响r,且这些新节点还会创造出更多的能够往右走的新节点:r+=l。

那么,现在我们考虑有'U'的情况:

如果U没有上升到一个没有走过的点,显然是要亏一波的,还不如直接跳过。

因此我们只需要考虑往上走能够走到新节点的情况(用S串来获取信息):

如果父亲在左边(它是右儿子),那么将会有l+=1; ans+=1;

如果父亲在右边:那么有r+=1,ans+=1;

代码

#include<map>
#include<cmath>
#include<queue>
#include<vector>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#define X first
#define Y second
#define mkp make_pair
#define lson (o<<1)
#define rson ((o<<1)|1)
#define mid (l+(r-l)/2)
#define pb(v) push_back(v)
#define sz() size()
#define all(o) (o).begin(),(o).end()
#define clr(a,v) memset(a,v,sizeof(a))
#define bug(a) cout<<#a<<" = "<<a<<endl
#define rep(i,a,b) for(int i=a;i<(b);i++) using namespace std; typedef long long LL;
typedef vector<int> VI;
typedef pair<int,int> PII;
typedef vector<pair<int,int> > VPII; const int INF=0x3f3f3f3f;
const LL INFL=0x3f3f3f3f3f3f3f3fLL;
const double eps=1e-8; const int maxn = 1e5+10;
const int mod=21092013; char s1[maxn],s2[maxn];
vector<char> sta; void add_mod(int &x,int y){ x=(x+y)%mod; } void init(){
sta.clear();
} int main() {
int tc,kase=0;
scanf("%d",&tc);
while(tc--){
init();
scanf("%s",s1);
int l1=strlen(s1);
rep(i,0,l1){
if(s1[i]=='U'){
if(sta.size()) sta.pop_back();
}else{
sta.pb(s1[i]);
}
}
scanf("%s",s2);
int l2=strlen(s2);
int l=1,r=1,ans=1;
rep(i,0,l2){
if(s2[i]=='U'){
if(sta.size()){
char last=sta[sta.sz()-1];
sta.pop_back();
if(last=='L'){
add_mod(r,1);
add_mod(ans,1);
}else{
add_mod(l,1);
add_mod(ans,1);
}
}
}else if(s2[i]=='L'){
add_mod(r,l);
add_mod(ans,l);
}else{
add_mod(l,r);
add_mod(ans,r);
}
}
printf("Case %d: %d\n",++kase,ans);
}
return 0;
}

UVALive - 6577 Binary Tree 递推+找规律的更多相关文章

  1. MT【103】二阶递推找规律

    评:如果直接找$a_n$的二阶递推式:$a_{n+2}-2\sqrt{2}a_{n+1}-a_n=0$有根号,不利于估计尾数.

  2. Full Binary Tree(二叉树找规律)

    Description In computer science, a binary tree is a tree data structure in which each node has at mo ...

  3. codeforces 353D 递推 找规律

    题意:一组男生女生在排队,每秒钟所有排在女生左边的男生与她相邻的女生交换位置,求女生全部换到男生前面的时间. 思路: 解法一:队伍最前面的那些女生不需要交换,后面的女生有两种状态:畅通无阻,前一个女生 ...

  4. UVALive 6577 Binary Tree 二叉树的LRU串

    今天继续攒人品...真开心啊O(∩_∩)O~~各种身体不舒服~~ https://icpcarchive.ecs.baylor.edu/external/65/6577.pdf 题意是这样的,现在有一 ...

  5. LA 3357 (递推 找规律) Pinary

    n位不含前导零不含连续1的数共有fib(n)个,fib(n)为斐波那契数列. 所以可以预处理一下fib的前缀和,查找一下第n个数是k位数,然后再递归计算它是第k位数里的多少位. 举个例子,比如说要找第 ...

  6. 51nod 1350 斐波那契表示(递推+找规律)

    传送门 题意 分析 我们发现该数列遵循下列规律: 1 1,2 1,2,2 1,2,2,2,3 1,2,2,2,3,2,3,3 我们令A[i]表示f[i]开始长为f[i-1]的i的最短表示和 那么得到A ...

  7. POJ 2499 Binary Tree(二叉树,找规律)

    题意:给一个这样的二叉树,每个节点用一对数(a,b)表示,根节点为(1,1).设父亲为(a,b),左儿子(a+b,b),右儿子(a,a+b). 给几组数据,(i,j),求从根节点到(i,j)节点需要向 ...

  8. C. Tennis Championship dp递推 || 找规律

    http://codeforces.com/contest/735/problem/C C. Tennis Championship time limit per test 2 seconds mem ...

  9. "红色病毒"问题 HDU 2065 递推+找循环节

    题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=2065 递推类题目, 可以考虑用数学方法来做, 但是明显也可以有递推思维来理解. 递推的话基本就是状态 ...

随机推荐

  1. project 2010 使用技巧

    快捷键 设置任务子任务 ALT+SHIFT+向右方向键 1.工作时间设置 新建一个日历后,可以在 “项目 >> 项目信息 >> 日历” 中进行选择

  2. 自定义Toast的显示效果

    Activity: package com.example.editortoast; import android.app.Activity; import android.os.Bundle; im ...

  3. 关键字替换排除HTML标签属性字符

    解决办法: 1.打开文件e/class/functions.php 2.找到函数 ReplaceKey($newstext,$classid=0) 3.找到替换代码 if(STR_IREPLACE) ...

  4. c语言内存分配-malloc

    malloc 原型:(原来返回类型是char) extern void *malloc(unsigned int num_bytes); 头文件: #include <stdlib.h> ...

  5. NOJ1066-堆排序

    堆排序 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 414            测试通过 : 220  比 ...

  6. EMVTag系列10《发卡行公钥证书》

    Ø  90  发卡行公钥(IPK)证书 L: NCA -C(有条件):如果支持SDA,DDA CA认证过的发卡行公钥.用于脱机数据认证 Ø  9F32    发卡行公钥指数 L: 1 or 3 -C( ...

  7. Mybatis动态SQL

    1.动态SQL基本标签 •if •choose (when, otherwise) •trim (where, set) •foreach 2.IF 具体用法 <select id=" ...

  8. Android--将图片存放到我们本地

    代码里面有详细的解释,我就不多说了 //处理并保存图像 private File dealPhoto(Bitmap photo){ FileOutputStream fileOutputStream ...

  9. hdu 1212 Big Number

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=1212 Big Number Description As we know, Big Number is ...

  10. 在meteor中使用支付,以及与服务器进行数据交互

    how to use Meteor.http.call? Meteor.http is only available on sever side http模块仅能用于server端. 1,add ht ...