UVA 1262编码(第k字典序)
来源:互联网 发布:发淘宝链接如何粘贴 编辑:程序博客网 时间:2024/05/29 15:50
点击打开链接
我们先统计分别在每一列均在两个矩阵出现的字母,然后从小到大排好序。
对于第一个样例来说,我们得到ACDW、BOP、GMOX、AP、GSU
第一个字母无论以什么开头 后面都有3*4*2*3=72种可能 当k<=72时 以a开头 73<=k<=144时第一个字母为C
tot为后面的全排列 tot/=cnt[i] 则第i个字符因取第j个 j=k/tot (下取整,所以k-- 保证(72-1)/72 和(71-1)/72都为取a字符) k-=tot*j
#include <iostream>#include <algorithm>#include <set>#include <cstring>#include <map>#include <vector> using namespace std;const int N=10;char x[N][N],y[N][N]; int cnt[N];vector<char> v[N];void input(){for(int i=1;i<=6;i++){for(int j=1;j<=5;j++){cin>>x[i][j];}} for(int i=1;i<=6;i++){for(int j=1;j<=5;j++){cin>>y[i][j];}} }int init(){for(int i=1;i<=5;i++)v[i].clear();for(int col=1;col<=5;col++) //找到可能的密码 {for(int r1=1;r1<=6;r1++){for(int r2=1;r2<=6;r2++){if(x[r1][col]==y[r2][col]){v[col].push_back(x[r1][col]);}}} }for(int i=1;i<=5;i++){if(v[i].empty()) return 0;sort(v[i].begin(),v[i].end());unique(v[i].begin(),v[i].end());cnt[i]=0;//第i列有多少个while(cnt[i]<v[i].size()-1&&v[i][cnt[i]+1]>v[i][cnt[i]]){cnt[i]++;} cnt[i]++;}return 1;}int main(){int t;cin>>t;while(t--){int k;//第k小cin>>k;input();if(!init()){cout<<"NO"<<endl; continue;}int tot=1;for(int i=1;i<=5;i++)tot*=cnt[i];if(tot<k){cout<<"NO"<<endl;continue;} k--;//vector中下标从0开始 for(int i=1;i<=5;i++)//确定第i位上的密码{tot/=cnt[i];//后面的最大排列 //字典序x大于a开头最大,小于b开头最大 则x为以b开头. //k大于j-1开头的最大&&小于j开头最大 int j=k/tot;//下取整 cout<<v[i][j];k-=j*tot; }cout<<endl;}return 0;}
0 0
- UVA 1262编码(第k字典序)
- uva 1262 Password 字典序第k个
- UVA.1262 Password ( dfs求字典序第k大 )
- 第k个字典序全排列
- 第k个字典序全排列(kth permutation)
- 有重字符串字典序第k排列
- 模拟之全排列的第k个字典序
- Codeforces 557E dp+字典树+字典序第k大
- leetcode 440. K-th Smallest in Lexicographical Order 第k个字典序的数字
- 找第k大的东西(密码,uva 1262)
- hdu 3225 Flowers Placement(字典序第k小的完美匹配)
- poj 1037 A decorative fence ( dp+输出第k字典序)
- poj 1037 DP 求波浪序列中按字典序排列的第k个序列
- SPOJ 7258 字典序第K小的子串:后缀自动机
- K-SVD简述——字典学习,稀疏编码
- K-SVD简述——字典学习,稀疏编码
- K-SVD简述——字典学习,稀疏编码
- K-SVD简述——字典学习,稀疏编码
- screen.width,screen.height
- 55.Git备忘笔记
- java enum(枚举)使用详解 + 总结
- JDBC 事务管理
- android中strings.xml占位符
- UVA 1262编码(第k字典序)
- 数据库 增删改查整理
- 关于group by 两个或以上条件的分析
- Ubuntu虚拟机启动遇到“Starting Virtual Printing daemon done”的问题
- hdu 5928 极角排序+dp
- 电磁学重整之电学(1)
- Spark Streaming 中使用 zookeeper 保存 offset 并重用 Java版
- Spring Boot基础教程8-web应用开发-模板引擎jsp
- 求Sn=a+aa+aaa+aaaa+a^n算法问题(输出界面优化一下(●ˇ∀ˇ●))