我们定义第一代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——stop

    为什么要停止动画? 对同一个元素,如果拥有一个以上的动画对其加以作用,那么后面的动画会被放入一个动画队列中.动画队列的动画是在其上一个动画完成以后才会执行. 控制两个参数四种情况 1.第一个参数表示后 ...

  2. CSS——行内元素的margin与padding

    行内元素: 1.margin:0 20px:只可以定义左右. 2.pading:20px 20px 20px 20px:上下左右都有效 例如span: <!DOCTYPE html> &l ...

  3. Kafka 入门和 Spring Boot 集成

    目录 Kafka 入门和 Spring Boot 集成 标签:博客 概述 应用场景 基本概念 基本结构 和Spring Boot 集成 集成概述 集成环境 kafka 环境搭建 Spring Boot ...

  4. Caffe2:添加CUDA路径

    在使用Eclipse时候,仍然出现 libcuda.so 找不到的情况..... 原因:cuda环境没有设置到系统环境中. 方案: 设置CUDA path: 在bashrc中添加路径,只对当前用户产生 ...

  5. 类QQ账号生成阐述

    具体需求如下: 数字账号从60000到9999999999(类似qq号一样的东东) 用户获取数字账号为随机分配,也可递加分配,需要符合如下规则 特殊账号需要保留,不能分配给用户,比如:112233(连 ...

  6. CI框架3.x 之实现前后端分离

    一.建立合理的目录结构 admin与home为后台和前台的控制器和模板文件夹 二.定义前后台视图路径常量 在constants.php中添加如下代码: //定义前台视图路径常量 define('HOM ...

  7. react 父组件调用子组件方法

    import React from 'react'import '../page1/header.css'import { Table } from 'antd'import Child from ' ...

  8. sysbench基准测试工具

    一.简介SysBench是一个模块化的.跨平台.多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况.当前功能允许测试的系统参数有:file I/O performance (文件I ...

  9. case....when ...多重判断

    CASE...WHEN 进行多重判断 CASE WHEN A  IS NOT NULL THEN B WHEN C IS NULL THEN CASE WHEN D IS NOT NULL THEN ...

  10. python爬虫11 | 这次,将带你爬取b站上的NBA形象大使蔡徐坤和他的球友们

    在上一篇中 python爬虫10 | 网站维护人员:真的求求你们了,不要再来爬取了!! 小帅b给大家透露了我们这篇要说的牛逼利器 selenium + phantomjs 如果你看了 python爬虫 ...