hdu6468 dfs剪枝 or char数组 or 构造
http://acm.hdu.edu.cn/showproblem.php?pid=6468
题意
有一个序列,是1到n的一种排列,排列的顺序是字典序小的在前,那么第k个数字是什么?(\(1 \leq n \leq 10^6,1 \leq k \leq n,多组T\leq 100\))
题解1
- 假如剪枝好的话,每次最多搜1e6,这样总共1e8,能过
- dfs序>=k剪掉,num>n剪掉
#include<bits/stdc++.h>
using namespace std;
int dfn,n,k,ans,T;
void dfs(int num){
if(dfn>=k)return;
dfn++;
//cout<<num<<" "<<dfn<<endl;
if(dfn==k){ans=num;return;}
int l=(!num?1:0);
for(int i=l;i<=9;i++){
if(num*10+i>n)return; //continue就超时了
dfs(num*10+i);
}
}
int main(){
cin>>T;
while(T--){
dfn=-1;
scanf("%d%d",&n,&k);
dfs(0);
printf("%d\n",ans);
}
}
题解2
https://www.twblogs.net/a/5c92e1f9bd9eee35cd6ba3b7/zh-cn
- 预处理出所有字符串,排序,O(6nlog(6*n))
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <deque>
#include <stack>
using namespace std;
typedef long long ll;
const int MAX=1e6;
const int MM=192600817;
struct A
{
ll k;
char s[8];
}a[MAX+1];
bool cmp(struct A p,struct A q)
{
return strcmp(p.s,q.s)<0;
}
int main()
{
ll T,n,k,i,j;
for(i=1;i<=MAX;i++)
{
a[i].k=i;
ll t=i,e=0,m;
while(t)
{
a[i].s[e]=(t%10)+'0';
t/=10;
e++;
}
for(j=0;j<e/2;j++)
{
char tt;
tt=a[i].s[j];
a[i].s[j]=a[i].s[e-j-1];
a[i].s[e-j-1]=tt;
}
}
sort(a+1,a+MAX+1,cmp);
//cout<<a[1000].s<<endl;
cin>>T;
while(T--)
{
cin>>n>>k;
i=1;
for(i=1;i<=MAX;i++)
{
if(a[i].k>n)
continue;
else
k--;
if(k==0)
break;
}
cout<<a[i].k<<endl;
}
return 0;
}
题解3
https://zeng1998.github.io/2019/03/16/hdu6468——zyb的面试/
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
ll solve(ll n,ll m){
//考虑一颗完全10叉树,树的所有节点就是1-n,要求的就是前序遍历的第m个节点
//m是可以走的步数
ll i=1;
m--;
while(m!=0){
//计算i到i+1的字典序中间相隔的个数
ll s=i,e=i+1;
ll num=0;
//防止越界
while(s<=n){
//计算每一层相差的个数
//n+1: 比如20-29其实是10个,而e就不用+1,因为e在这里表示30(40/50...)
num+=min(n+1,e)-s;
s*=10;
e*=10;
}
if(m<num){
//向下
i*=10;
//走一步
m--;
}else{
//向右
i++;
//对前序遍历来说,走了num步
m-=num;
}
}
return i;
}
int t;
ll n, m;
int main() {
scanf("%d",&t);
while (t--){
scanf("%lld%lld",&n,&m);
printf("%lld\n",solve(n,m));
}
return 0;
}
hdu6468 dfs剪枝 or char数组 or 构造的更多相关文章
- Codeforces Round #225 (Div. 1) C. Propagating tree dfs序+树状数组
C. Propagating tree Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/383/p ...
- BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )
一个串a在b中出现, 那么a是b的某些前缀的后缀, 所以搞出AC自动机, 按fail反向建树, 然后查询(x, y)就是y的子树中有多少是x的前缀. 离线, 对AC自动机DFS一遍, 用dfs序+树状 ...
- 【bzoj3881】[Coci2015]Divljak AC自动机+树链的并+DFS序+树状数组
题目描述 Alice有n个字符串S_1,S_2...S_n,Bob有一个字符串集合T,一开始集合是空的. 接下来会发生q个操作,操作有两种形式: “1 P”,Bob往自己的集合里添加了一个字符串P. ...
- [BZOJ1103][POI2007]大都市meg dfs序+树状数组
Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景.昔日,乡下有依次编号为1..n ...
- 【BZOJ】2819: Nim(树链剖分 / lca+dfs序+树状数组)
题目 传送门:QWQ 分析 先敲了个树链剖分,发现无法AC(其实是自己弱,懒得debug.手写栈) 然后去学了学正解 核心挺好理解的,$ query(a) $是$ a $到根的异或和. 答案就是$ l ...
- 【bzoj3779】重组病毒 LCT+树上倍增+DFS序+树状数组区间修改区间查询
题目描述 给出一棵n个节点的树,每一个节点开始有一个互不相同的颜色,初始根节点为1. 定义一次感染为:将指定的一个节点到根的链上的所有节点染成一种新的颜色,代价为这条链上不同颜色的数目. 现有m次操作 ...
- Black And White(DFS+剪枝)
Black And White Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 512000/512000 K (Java/Others ...
- 【bzoj2819】Nim DFS序+树状数组+倍增LCA
题目描述 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...
- HDU5113【DFS+剪枝】
题意: n*m的矩阵 k种颜色 每种颜色有c[i]个 上下左右相邻的格子不能一样的颜色 问你有没有一种染色方法,有的话输出方案. 思路: 暴搜啊,n,m都才5,做完以后大哥的剪枝是奇偶剪枝,其实画完图 ...
随机推荐
- 浅谈C++ STL list 容器
浅谈C++ STL list 容器 本篇随笔简单讲解一下\(C++STL\)中\(list\)容器的使用方法和使用技巧. list容器的概念 学习过\(C++STL\)的很多同学都知道,\(STL\) ...
- 通过windows组策略配置时间同步
Windows系统中带有NTP服务器和客户端的程序,只需在Windows中简单配置即可实现电脑之间的时间同步. 网上常见的配置NTP服务器的方法是修改系统注册表,这种方法是微软不推荐的.在实际使用中, ...
- Mac下MongoDB配置与操作
1.环境配置 Xcode安装 2.下载安装包 官网地址是:MongoDB Download Center | MongoDB 3.解压文件, 将文件放置/usr/local 4.配置环境变量 open ...
- Note | 北航《网络安全》复习笔记
目录 1. 引言 2. 计算机网络基础 基础知识 考点 3. Internet协议的安全性 基础知识 考点 4. 单钥密码体制 基础知识 考点 5. 双钥密码体制 基础知识 考点 6. 消息认证与杂凑 ...
- python-11-字典的增删改查
前言 1.dict 字典:{key,vlaue} --key 必须是不可变数据类型,可哈希,--value:任意数据类型 2.dict优点:二分查找去查询--存储大量的关系型数据,可哈希.--无序的, ...
- Linux 部署 rabbitMQ集群
1. 部署Erlang 1.1 RabbitMQ依赖于Erlang,版本对应请查看 https://www.rabbitmq.com/which-erlang.html 1.2 下载安装Erlang ...
- 《细说PHP》第四版 样章 第18章 数据库抽象层PDO 7
18.6 PDO对预处理语句的支持 在生成网页时,许多PHP脚本通常都会执行除参数外其他部分完全相同的查询语句.针对这种重复执行一个查询,但每次迭代使用不同参数的情况,PDO提供了一种名为预处理语句 ...
- Python之基本运算符
基本运算符 1.算符运算符 运算符 描述 例子 + 两个对象相加 a+b - 两个对象相减 a-b * 两个数相乘或返回一个被重复若干次的字符串 a*b / 两个数相除 a/b % 取模,返回除法的余 ...
- 数据库——数据库设计 E-R图向关系模型的转换
1.将下列物资管理E-R图转换为关系模式: 转换原则 ⒈ 一个实体型转换为一个关系模式.关系的属性:实体型的属性关系的码:实体型的码 ⒉ 一个m:n联系转换为一个关系模式(初步,以后可能调整). ...
- 一个小事例,了解golang通道阻塞模式
在学习golang中,channel真的是让人捉摸不透的东西,本来我自以为我理解了协程阻塞的用法了,结果就下面这个小例子,我还是在打印输出后才搞明白到底怎么回事? 当然了,这也是我自身对协程这块不太熟 ...