题意:

给出两个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,以此类推。

确定第二个字母是类似的,用k%72+1与24去比较。

代码实现中,字典序是从0开始的。

 //#define DEBUG
#include <cstdio>
#include <cstring> char G[][][], ans[], select[][];
int vis[][], hehe[], cnt[]; int main()
{
//freopen("in.txt", "r", stdin); int T;
scanf("%d", &T);
hehe[] = ;
while(T--)
{
memset(cnt, , sizeof(cnt));
int k;
scanf("%d", &k);
k--; //字典序标号从0开始
for(int i = ; i < ; ++i)
for(int j = ; j < ; ++j)
scanf("%s", G[i][j]); for(int i = ; i < ; ++i)
{
memset(vis, , sizeof(vis));
for(int j = ; j < ; ++j)
for(int k = ; k < ; ++k)
vis[j][G[j][k][i]-'A'] = ;
for(int j = ; j < ; ++j)
if(vis[][j] && vis[][j])
select[i][cnt[i]++] = 'A' + j;
} #ifdef DEBUG
for(int i = ; i < ; ++i)
{
for(int j = ; j < select[i].size(); ++j)
printf("%c", select[i][j]);
puts("");
}
#endif // DEBUG for(int i = ; i >= ; --i)
hehe[i] = cnt[i] * hehe[i+];
if(k >= hehe[])
{
puts("NO");
continue;
}
for(int i = ; i < ; ++i)
{
int m = k / hehe[i+];
ans[i] = select[i][m];
k = k % hehe[i+];
}
ans[] = '\0'; printf("%s\n", ans);
} return ;
}

代码君一

解法二:

因为密码最多有65 = 7776种,所以可以按字典序从小到大枚举。

思维难度小,写起来更快更对。

 #include <cstdio>
#include <cstring> int k, cnt;
char G[][][], ans[]; bool dfs(int col)
{
if(col == )
{
if(++cnt == k)
{
ans[col] = '\0';
printf("%s\n", ans);
return true;
}
return false;
} bool vis[][];
memset(vis, false, sizeof(vis));
for(int i = ; i < ; ++i)
for(int j = ; j < ; ++j)
vis[i][G[i][j][col] - 'A'] = ;
for(int i = ; i < ; ++i)
if(vis[][i] && vis[][i])
{
ans[col] = i + 'A';
if(dfs(col+)) return true;
}
return false;
} int main()
{
//freopen("in.txt", "r", stdin);
int T;
scanf("%d", &T);
while(T--)
{
scanf("%d", &k);
for(int i = ; i < ; ++i)
for(int j = ; j < ; ++j)
scanf("%s", G[i][j]); cnt = ;
if(!dfs()) puts("NO");
} return ;
}

代码君二

UVa 1262 (第k字典序) Password的更多相关文章

  1. 【暑假】[数学]UVa 1262 Password

    UVa 1262  Password 题目: Password   Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld ...

  2. UVA - 1262 数学

    UVA - 1262 题意: 有两个6*5 的大写字母组成的矩阵,需要找出满足条件的字典序第k小的密码:密码中每个字母在两个矩阵的对应的同一列中都出现过 代码: // 先处理出来每一列可以取的字母,例 ...

  3. UVA 1262 Password 暴力枚举

    Password Time Limit: 3000ms Memory Limit: 131072KB This problem will be judged on UVA. Original ID:  ...

  4. UVa 1262 - Password(解码)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  5. UVA 1262 Password

    https://vjudge.net/problem/UVA-1262 字典序第k小 注意两点: 1. k-- 2.去重 #include<cstring> #include<cst ...

  6. UVA - 1262 Password(密码)(暴力枚举)

    题意:给两个6行5列的字母矩阵,找出满足如下条件的“密码”:密码中的每个字母在两个矩阵的对应列中均出现.给定k(1<=k<=7777),你的任务是找出字典序第k小的密码.如果不存在,输出N ...

  7. UVA1262Password(第K字典序)

    题目链接 紫书P323 题意:两个6*5的字母矩阵,两个矩阵每列相同的字母,每列取一个,求按照字典序第k小的序列 分析: 对于第一个样例来说,我们得到{ACDW}.{BOP}.{GMOX}.{AP}. ...

  8. HDOJ-6628(dfs+第k字典序最小差异序列)

    permutation 1 HDOJ-6628 这题使用的暴力深搜,在dfs里面直接从最小的差异开始枚举 注意这里的pre记录前一个数,并且最后答案需要减去排列中最小的数再加一 这里有一个技巧关于求第 ...

  9. 【每日一题】 UVA - 1599 Ideal Path 字典序最短路

    题解:给一个1e5个点2e5条边,每个边有一个值,让你输出一条从1到n边的路径使得:条数最短的前提下字典序最小. 题解:bfs一次找最短路(因为权值都是1,不用dijkstra),再bfs一次存一下路 ...

随机推荐

  1. Django 学习笔记之五 Django中数据库中ManyToManyField及ForeignKey

    1.model里面的代码: from __future__ import unicode_literalsimport django.utils.timezone as timezonefrom dj ...

  2. 送给那些喜欢myeclipse黑色主题但是又不知道怎么配色的人

    设置MyEclipse黑色主题背景 1. 下载 http://eclipsecolorthemes.org/  看哪个合适直接点击进入, 下载右边的epf 2. 下载完成...打开myeclipse. ...

  3. HTML5网页制作教程:HTML5块级链接

    网页制作Webjx文章简介:Web 标准中处处充满了打脸行为,这条规则现在已经失效了!在那篇文章发布一个月后,HTML5doctor 发表了 “Block-level” links in HTML5, ...

  4. 【tarjan】BZOJ 1051:受欢迎的牛

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3134  Solved: 1642[Submit][Sta ...

  5. c++ 虚继承

    虚继承(个人感觉用到的地方不多,项目中没有用到这个的) 最典型的例子就是iostream的继承方式 class istream : virtual public ios{...};//此处就是虚继承, ...

  6. specular map normal map gloss map

    http://www.marmoset.co/toolbag/learn/materials http://digitalerr0r.wordpress.com/2009/03/26/xna-shad ...

  7. matlab中函数fscanf

    matlab中函数fscanf matlab中函数fscanf在文件读取方面的实例如下: 从文件中有格式地读数据 fscanf 语法1:[a,count]=fscanf(fid,format,size ...

  8. 【Unity3D】iOS 推送实现

    原地址:http://www.iappfan.com/%E3%80%90unity3d%E3%80%91ios-%E6%8E%A8%E9%80%81%E5%AE%9E%E7%8E%B0/ #impor ...

  9. 原 Linux搭建SVN 服务器

    原 Linux搭建SVN 服务器 发表于1年前(2014-08-05 17:55)   阅读(12257) | 评论(3) 31人收藏此文章, 我要收藏 赞3 摘要 Linux搭建SVN 服务器 目录 ...

  10. HDU4725 The Shortest Path in Nya Graph SPFA最短路

    典型的最短路问题,但是多了一个条件,就是每个点属于一个layer,相邻的layer移动,如x层移到x+1层需要花费c. 一种显而易见的转化是我把这些边都建出来,但是最后可能会使得边变成O(n^2); ...