codechef Chef and Left-Right
来源:互联网 发布:ado.net mysql 编辑:程序博客网 时间:2024/06/05 08:41
Problem Description
Chef has a nice complete binary tree in his garden. Complete means that each node has exactly twosons, so the tree is infinite. Yesterday he had enumerated the nodes of the tree in such a way:
- Let's call the nodes' level a number of nodes that occur on the way to this node from the root, including this node. This way, only the root has the level equal to 1, while only its two sons has the level equal to 2.
- Then, let's take all the nodes with the odd level and enumerate them with consecutive odd numbers, starting from the smallest levels and the leftmost nodes, going to the rightmost nodes and the highest levels.
- Then, let's take all the nodes with the even level and enumerate them with consecutive even numbers, starting from the smallest levels and the leftmost nodes, going to the rightmost nodes and the highest levels.
- For the better understanding there is an example:
1 / \ 2 4 / \ / \ 3 5 7 9 / \ / \ / \ / \ 6 8 10 12 14 16 18 20
Here you can see the visualization of the process. For example, in odd levels, the root was enumerated first, then, there were enumerated roots' left sons' sons and roots' right sons' sons.
You are given the string of symbols, let's call it S. Each symbol is either l or r. Naturally, this sequence denotes some path from the root, where l means going to the left son and r means going to the right son.
Please, help Chef to determine the number of the last node in this path.
Input
The first line contains single integer T number of test cases.
Each of next T lines contain a string S consisting only of the symbols l and r.
Output
Per each line output the number of the last node in the path, described by S, modulo 109+7.
Constraints
- 1 ≤ |T| ≤ 5
- 1 ≤ |S| ≤ 10^5
- Remember that the tree is infinite, so each path described by appropriate S is a correct one.
Example
Input:4lrlrllrlllrOutput:1014413
Explanation
See the example in the statement for better understanding the samples.
题解
找找数字间的规律即可。
#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<cmath>#include<algorithm>#define ll long long#define mod 1000000007using namespace std;int T,n;char a[100010];ll s;void ji(int i){if(a[i]=='l') s=(s<<1)%mod;else s=((s<<1)+2)%mod;}void ou(int i){if(a[i]=='l') s=((s<<1)-1)%mod;else s=((s<<1)+1)%mod;}int main(){scanf("%d",&T);while(T--) {scanf("%s",a+1); n=strlen(a+1); s=1; for(int i=1;i<=n;i++) {if(i&1) ji(i); else ou(i); }printf("%lld\n",s); }return 0;}
- codechef Chef and Left-Right
- codechef Chef and The Right Triangles 题解
- CodeChef Chef and Segments
- codechef Chef and sequence
- codechef Chef and Swaps
- Codechef Chef and Reversing
- Codechef Chef and Frogs
- Codechef Chef and Churu
- 【CodeChef】 Chef and Stones
- 【CodeChef】Chef and Interview
- codechef Chef and Churu
- codechef Chef and easy problem
- codechef-Chef and Prime Divisors
- CodeChef Chef and Strange Operations
- Chef and Graph Queries (codechef)
- CodeChef Chef and Churu Problem
- codechef Chef and easy problem 2
- codechef Chef and Rainbow Array - 2
- junit in action读书笔记
- linux守护进程
- 【uva】10494 If We Were a Child Again
- 第八届湖南省赛I题 Collecting Coins(BFS)
- oradebug 推进SCN
- codechef Chef and Left-Right
- JAVAEE基础
- C/C++内存分配
- 人脸检测和识别
- select函数用法
- 直方图均衡化
- 修改本机host下载android的sdk
- NSKeyedUnarchiver
- centos 安装python2.7