我们定义第一代hiho字符串是"hiho"。

第N代hiho字符串是由第N-1代hiho字符串变化得到,规则是:

h -> hio

i -> hi

o -> ho

例如第二代hiho字符串是: hiohihioho

第三代是: hiohihohiohihiohihohioho

给定N和K,请你计算第N代hiho字符串中的第K个字符是什么。

Input

第一行包含一个整数T,代表测试数据的组数。 (1 ≤ T ≤ 10)

以下T行每行包含两个整数N和K。

对于50%的数据,每一组的N都满足 1 ≤ N ≤ 15

对于100%的数据, 1 ≤ N ≤ 100, 1 ≤ K ≤ 1000000000

Output

对于每组数据,输出一行,包含一个字符代表答案。

Sample Input

3
1 1
2 5
3 7

Sample Output

h
i
o 大意:初始字符串为hiho,一轮过后,h变为hio,i变成hi,o变成ho
问N轮过后字符串中第K个字符是什么。 题解:f[j][i]代表第 j 种字符经过 i-1 轮变换后变成了多少字符。(j==1代表 h ,j==2 代表 i ,j==3代表 o)
然后划分第N轮的字符,确定第K个在哪部分,然后进入第N-1轮,继续划分……很明显的递归性质。
 /*
Welcome Hacking
Wish You High Rating
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<string>
using namespace std;
int read(){
int xx=,ff=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')ff=-;ch=getchar();}
while(ch>=''&&ch<=''){xx=(xx<<)+(xx<<)+ch-'';ch=getchar();}
return xx*ff;
}
const int limit=;
int T,N,K;
long long f[][];//h:1 i:2 o:3
void dfs(int arg,int depth,int sum){
if(depth==){
if(arg==)
printf("h\n");
else if(arg==)
printf("i\n");
else
printf("o\n");
return;
}
if(arg==){
if(sum<=f[][depth-])
dfs(,depth-,sum);
else{
sum-=f[][depth-];
if(sum<=f[][depth-])
dfs(,depth-,sum);
else{
sum-=f[][depth-];
dfs(,depth-,sum);
}
}
}
else if(arg==){
if(sum<=f[][depth-])
dfs(,depth-,sum);
else{
sum-=f[][depth-];
dfs(,depth-,sum);
}
}
else{
if(sum<=f[][depth-])
dfs(,depth-,sum);
else{
sum-=f[][depth-];
dfs(,depth-,sum);
}
}
}
int main(){
//freopen("in","r",stdin);
//freopen("out","w",stdout);
for(int i=;i<=;i++)
f[i][]=;
for(int i=;i<=;i++){
f[][i]=f[][i-]+f[][i-]+f[][i-];
f[][i]=f[][i-]+f[][i-];
f[][i]=f[][i-]+f[][i-];
for(int j=;j<=;j++)
if(f[j][i]>limit)
f[j][i]=limit+;
}
T=read();
while(T--){
N=read(),K=read();
if(K<=f[][N])
dfs(,N,K);
else{
K-=f[][N];
if(K<=f[][N])
dfs(,N,K);
else{
K-=f[][N];
if(K<=f[][N])
dfs(,N,K);
else{
K-=f[][N];
dfs(,N,K);
}
}
}
}
return ;
}

hihocoder 1680 hiho字符串2 dp求方案数+递归的更多相关文章

  1. poj3254 Corn Fields 利用状态压缩求方案数;

    Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10658   ...

  2. codevs1297 硬币(背包dp,方案数)

    1297 硬币  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold   题目描述 Description 我们知道即使是同一种面值的硬币,它们的重量也有可能不一样, ...

  3. hihoCoder #1320 : 压缩字符串 区间dp

    /** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母' ...

  4. lightoj1064 【DP求方案】

    题意: n个相同的骰子,问你掷出>=x点数的可能性: 思路: dp[i][j]代表前 i 个骰子掷出 j 点数的方案数; 然后Σdp[n][x]-dp[n][6*n]就好了 卧槽,一开始想的是拆 ...

  5. 洛谷P1108 低价购买[DP | LIS方案数]

    题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...

  6. 洛谷P1164 小A点菜(01背包求方案数)

    P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...

  7. HDU5119【dp背包求方案数】

    题意: 有n个数,问有多少方案满足取几个数的异或值>=m; 思路: 背包思想,每次就是取或不取,然后输出>=m的方案就好了. #include <bits/stdc++.h> ...

  8. hdu2126(求方案数的01背包)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数. 分析:一看 ...

  9. AcWing 11. 背包问题求方案数

    //g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]= ...

随机推荐

  1. 超经典~超全的jQuery插件大全

    海量的jQuery插件帖,很经典,不知道什么时候开始流传,很早以前就收藏过,为了工作方便还是发了一份放在日志里面. 其中有些已经无法访问,或许是文件移除,或许是被封锁.大家分享的东西,没什么特别的可说 ...

  2. 查看/进入mac根目录的方式

    1.通过“前往文件夹”快捷键组合 (1)打开finder,点击上部菜单栏“前往”,然后“个人”,直接跳转. (2)快捷键组合:command + shift + G:注意:打开finder后,再快捷键 ...

  3. Java单元测试 - TestNG

    官网 Eclipse安装TestNG插件 与Junit相比 从Junit发展而来,开发者就是Junit小组的一个人 Test Suite不再需要硬编码,就像cf自动登录的脚本中一样,可以写到一个xml ...

  4. day2笔记

    今日内容: 1.常用数据类型即数据方法 2.文件处理 3.函数 一 列表: 在[]内,可以存放多个任意类型的值,并以逗号隔开. 一般用于存放学生的爱好,课堂的周期等等 优先掌握的操作: 1.按索引取值 ...

  5. linux下如何限制普通用户更改密码

    问题描述: 为了方便linux管理员对所有用户的进行管理,如何限制普通用户更改密码? 解决方法: 禁止普通用户更改密码: /usr/bin/passwd 若要允许普通用户更改密码: /usr/bin/ ...

  6. Django - Ajax基本内容整理

    将原来的请求结果普通字符串,变更为类字典的字符串 从这段代码中,可以看到,对原有函数,进行了一个try ...except....操作,进行异常捕捉,将捕捉过程及结果,存入在初始化的字典中,将字典通过 ...

  7. What is the difference between rhel 6 and rhel7

    What is the difference between rhel 6 and rhel7 difference rhel 6 RHEL 7 release date 10 NOV 2010 as ...

  8. Linux - redis主从同步

    目录 Linux - redis主从同步 环境准备 配置主从同步 测试写入数据,主库写入数据,检查从库数据 手动进行主从复制故障切换 Linux - redis主从同步 原理: 从服务器向主服务器发送 ...

  9. 第八节:numpy之四则运算与逻辑运算

  10. 第六节:pandas函数应用

    1.pipe() :表格函数应用: 2.apply():表格行列函数应用: 3.applymap():表格元素应用.