hihocoder 1680 hiho字符串2 dp求方案数+递归
我们定义第一代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求方案数+递归的更多相关文章
- poj3254 Corn Fields 利用状态压缩求方案数;
Corn Fields 2015-11-25 13:42:33 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10658 ...
- codevs1297 硬币(背包dp,方案数)
1297 硬币 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 我们知道即使是同一种面值的硬币,它们的重量也有可能不一样, ...
- hihoCoder #1320 : 压缩字符串 区间dp
/** 题目:hihoCoder #1320 : 压缩字符串 链接:https://hihocoder.com/problemset/problem/1320 描述 小Hi希望压缩一个只包含大写字母' ...
- lightoj1064 【DP求方案】
题意: n个相同的骰子,问你掷出>=x点数的可能性: 思路: dp[i][j]代表前 i 个骰子掷出 j 点数的方案数; 然后Σdp[n][x]-dp[n][6*n]就好了 卧槽,一开始想的是拆 ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- 洛谷P1164 小A点菜(01背包求方案数)
P1164 小A点菜 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:“随便点”. 题目描述 不过u ...
- HDU5119【dp背包求方案数】
题意: 有n个数,问有多少方案满足取几个数的异或值>=m; 思路: 背包思想,每次就是取或不取,然后输出>=m的方案就好了. #include <bits/stdc++.h> ...
- hdu2126(求方案数的01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2126 题意: n个物品,m元钱,每个物品最多买一次,问最多可以买几件物品,并且输出方案数. 分析:一看 ...
- 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]= ...
随机推荐
- dubbo之令牌验证
防止消费者绕过注册中心访问提供者 在注册中心控制权限,以决定要不要下发令牌给消费者 注册中心可灵活改变授权方式,而不需修改或升级提供者 可以全局设置开启令牌验证 <!--随机token令牌,使用 ...
- Detectron-MaskRCnn: 用于抠图的FCNN
市面上暂时还没有找到可以在消费机显卡上实时运行的MaskRCnn,TensorFlow即使是C++版本训练在coco数据集上的模型也是慢的要死,最后不堪忍受,只能放弃. 经历了一些列fuckingDo ...
- Linux下清空文件的常用方法
1. 本人用的最多,感觉也是最方便的: > filename.log 2. : > filename.log 3. cat /dev/null > filename.log
- 使用ScriptManager服务器控件前后台数据交互
前台页面信息: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebFor ...
- C语言比较好的风格梳理
errno int err; tb = malloc(sizeof(struct xtracer_table)); if (!tb) { err = errno; fprintf(stderr, &q ...
- vue移动端地址三级联动组件(二)
继续上一篇: 子组件css: <style scoped lang="less"> #city { width: 100%; height: 100%; positio ...
- mapbox-gl 使用ArcGISServer 发布的栅格切片
最近使用mapbox 进行数据化展现.刚好用到了超图平台在去三维系统,顺带就用超图平台发布了栅格切片,用来做底图,但是超图平台是试用的许可,栅格切片有SuperMap 的水印,实在不雅观. 在网上搜索 ...
- PostgreSQL使用总结
最近项目用到了PostgreSQL数据库,网上一堆教程,这里自己整理一下做个笔记: 1,下载安装,我这边安装在Windows7,在这里找到大象一样的标志: 2,双击打开,这里的话按流程直接走: 3,这 ...
- 00.pip安装包
pip安装更换镜像源 pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com pip导出和导入 ...
- [Usaco2014 Mar]Sabotage
[Usaco2014 Mar]Sabotage 题目 Farmer John"s arch-nemesis, Farmer Paul, has decided to sabotage Far ...