UVA1262Password(第K字典序)】的更多相关文章

题目链接 紫书P323 题意:两个6*5的字母矩阵,两个矩阵每列相同的字母,每列取一个,求按照字典序第k小的序列 分析: 对于第一个样例来说,我们得到{ACDW}.{BOP}.{GMOX}.{AP}.{GSU} 则一共有4×3×4×2×3=288种密码,我们先计算这个数列的后缀积:288.72.24.6.3.1 要确定第一个字母,如果1≤k≤72,则是A:如果73≤k≤144,则是C,以此类推. k / 72 + 1就是第一个集合中的第几个元素 求第二个集合的时候,k = k % 72 ...…
题意: 给出两个6行5列的字母矩阵,一个密码满足:密码的第i个字母在两个字母矩阵的第i列均出现. 然后找出字典序为k的密码,如果不存在输出NO 分析: 我们先统计分别在每一列均在两个矩阵出现的字母,然后从小到大排好序. 对于第一个样例来说,我们得到ACDW.BOP.GMOX.AP.GSU 则一共有4×3×4×2×3=288种密码,我们先计算这个数列的后缀积:288.72.24.6.3.1 要确定第一个字母,如果1≤k≤72,则是A:如果73≤k≤144,则是C,以此类推. 确定第二个字母是类似的…
permutation 1 HDOJ-6628 这题使用的暴力深搜,在dfs里面直接从最小的差异开始枚举 注意这里的pre记录前一个数,并且最后答案需要减去排列中最小的数再加一 这里有一个技巧关于求第k小的问题,就是在dfs里面只要找到满足的长度为n的排列,k就减一,这样当k为0时的排列就是字典序第k小的了. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #…
P2022 有趣的数 让我们来考虑1到N的正整数集合.让我们把集合中的元素按照字典序排列,例如当N=11时,其顺序应该为:1,10,11,2,3,4,5,6,7,8,9. 定义K在N个数中的位置为Q(N,K),例如Q(11,2)=4.现在给出整数K和M,要求找到最小的N,使得Q(N,K)=M. 输入输出格式 输入格式: 输入文件只有一行,是两个整数K和M. 输出格式: 输出文件只有一行,是最小的N,如果不存在这样的N就输出0. 题解 对于该题来说,我们只需考虑比K小的数就可以了,比K小的自然数中…
三维DP 第K字典序从左向右找 根据dp数组的值算出每一位该打印什么 代码: #include <cstdio> #include <cstring> using namespace std; ][][]; long long solve(int n, int m, int last)//n划分成m个数最小值为last: { ) { ; ; } long long &ret = memo[n][m][last]; ) { ret = ; ) * i <= m; ++i…
时间限制:0.5s 空间限制:6M 题意:         在b(2<b<36)进制中,找到所有长度为n(0<n<2000)的自守数k,满足k^2%b^n=k,字典序输出.         如 十进制中     9376^2 = 87909376   后面4位数都是9376. Solution:                可以发现长度为n的满足要求的数中,其后n-1位也是自守数.                这样的数是很稀疏的,可以直接从n=1的情况开始搜索.当找到长度为n的…
Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8860    Accepted Submission(s): 2331 Problem Description These are N cities in Spring country. Between each pair of cities…
一道考验思维的好题,顺便总结求第k大问题的常规思路: 传送门:$>here<$ 题意 给出初始串FX,每分形一次所有X替换为X+YF,所有Y替换为FX-Y.问$n$代字符串第$p$位起长度为$l$的串. 数据范围:$n \leq 50, p \leq 10^9, l \leq 50$ Solution 将求解一个串转化为求解第$k$个字符.这样的话只有求解$l$次字符就好了. 如果直接暴力去做,肯定从初始串开始暴力去一轮一轮的展开.而实际上并不需要展开每一个,因为只需要求一个字符.我只需要知道…
Problem 题目给出一个加密前的字符串长度为p和加密后的字符串长度为s,让你求一个长度为K字典序最小的密钥. 密钥是循环的,第i位为1表示加密前的第i为是有用的否则是没用的. Solution 首先枚举秘钥中一共有x个1(1<=x<=min(s,k)) 一个秘钥有x个1,也就是能确定加密串每个位置所对应秘钥的第几次循环. 并且贪心从后往前找每一个位置即可. Notice 容易出错 Code #include<cmath> #include<cstdio> #incl…
说明: 以下代码是个人按照自己的理解写的,可能有错误或者不太规范的地方,欢迎指出! 代码如下: //插入.删除.查询.遍历四种操作 //注意:四种操作的函数实现中,T都是指向上一个结点的指针,以此方便操作. #include<bits/stdc++.h> using namespace std; typedef long long LL; const double eps = 1e-6; const int INF = 2e9; const LL LNF = 9e18; const int m…