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 ...

还有一些处理的细节,在代码中

#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
int k;
char G[2][10][10]; //一个三维的数组存储两个矩阵
int vis[2][30],cnt[10],he[10]; //vis[i][j]表示第i个矩阵第j个字母是否访问,cnt是每一列的总数,he是后缀积
char Select[10][10],ans[10]; //select[i][j]表示第i行第j个字母
int main()
{int test;scanf("%d", &test);while(test--){scanf("%d", &k);for(int i = 0; i < 2; i++){for(int j = 0; j < 6; j++)scanf("%s", G[i][j]);}memset(cnt, 0, sizeof(cnt));for(int i = 0; i < 5; i++)  //找两个矩阵对应的列中相同的元素处理的很好,对每一列对两个矩阵一行一行的查找
        {memset(vis, 0, sizeof(vis));for(int j = 0; j < 2; j++)  {for(int m = 0; m < 6; m++)vis[j][ G[j][m][i] - 'A' ] = 1;}for(int j = 0; j < 26; j++){if(vis[0][j] && vis[1][j])  //两个矩阵同一列都访问过了Select[i][ ++cnt[i] ] = 'A' + j; //第i列第cnt[i]个放入这个字母
            }}he[5] = 1;for(int i = 4; i >= 0; i--){he[i] = cnt[i] * he[i + 1];}if(k > he[0]){printf("NO\n");continue;}k--; //因为考虑到k == 1的情况for(int i = 0; i < 5; i++){int t = k / he[i + 1];ans[i] = Select[i][t + 1]; //对于每一个字母都是从1开始标号的,整除之后取下一个,就像k = 1时,每一列都得取第一个,对于最后一列的时候 t = 1,那就取第二个了,所以k--k = k % he[i + 1];}ans[5] = '\0';printf("%s\n", ans);}return 0;
}

 

转载于:https://www.cnblogs.com/zhaopAC/p/5222628.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396757.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义 View 循环滚动刻度控件

LoopScaleView 先看效果图: enter description hereLoopScaleView 是一个自定义的刻度尺风格的选值控件,从上面的动图大家可以看到 LoopScaleView 的运行效果.可以设置屏幕内显示的刻度数,也可以设置每一个刻度代表的值得大小。 LoopScaleView.class Nested class OnValueChang…

go 类型断言_(57)接口的类型断言

GO提供了一个方法&#xff0c;用来判断接口的底层值是什么类型类型断言 提供了访问接口值底层具体值的方式。t : i.(T)该语句断言接口值 i 保存了具体类型 T&#xff0c;并将其底层类型为 T 的值赋予变量 t。若 i 并未保存 T 类型的值&#xff0c;该语句就会触发一个panic。为了…

使用web3j构建以太坊钱包

创建一个以太坊钱包有多种方式&#xff0c;一般情况下可以通过geth、EtherumWallet等客户端。对于前端&#xff0c;可以使用插件MetaMask进行创建。这几种方式技术实现虽然不同&#xff0c;但底层原理是一致的。本文主要介绍如何通过web3j架构创建一个以太坊的冷钱包&#xff0…

Html、CSS、JavaScript 实时效果在线编辑器 - 学习的好工具,算不算?!

关于 二维码 与 NFC 之间的出身贫贱说太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es)本文遵循“署名-非商业用途-保持一致”创作公用协议转载请保留此句&#xff1a;太阳火神的漂亮人生 - 本博客专注于 敏捷开发及移动和物联设备研究&#xff1a;iOS、Android、Html5、…

android自定义更新,Android 完美解决自定义preference与ActivityGroup UI更新的问题

之前发过一篇有关于自定义preference 在ActivityGroup 的包容下出现UI不能更新的问题&#xff0c;当时还以为是Android 的一个BUG 现在想想真可笑 。其实是自己对机制的理解不够深刻&#xff0c;看来以后要多看看源码才行。本篇讲述内容大致为如何自定义preference 开始到与Act…

vxlan 资料及其在 neutron中的应用

2019独角兽企业重金招聘Python工程师标准>>> VXLAN 是一个新兴的SDN 标准&#xff0c;它定义了一种新的 overlay 网络&#xff0c;它主要的创造者是 VMware, Cisco 和 Arista。它被设计来消除虚拟化网络世界中的 VLAN 数目的限制。VXLAN 本身是一个多播标准&#xf…

横流式冷却塔计算风量_研讨丨卓展标准高效制冷机房技术之影响冷却塔效率的几个因素...

集中制冷用空调系统中&#xff0c;单台冷却塔的冷却水量基本上都小于1,000m/h&#xff0c;且装有淋水填料的横流机械通风开式居多。本文将已横流开式冷却塔为对象&#xff0c;探讨影响其效率的几个因素。横流开式冷却塔示意图如下所示&#xff1a;横流开式冷却塔示意图 Fig 01说…

我是培训出来的我怕谁

引子: 江小峰是我带过的徒弟中跟我最久&#xff0c;也是最聪明的一个。 他一个高中生&#xff0c;没上过大学&#xff0c;高中毕业后在老家卖了三年电脑&#xff0c;天天给人装操作系统&#xff0c;有天他在网上看到某培训机构招生简介&#xff0c;一时冲动揣上三年血汗钱&…

android平台gallery2应用分析,Android5.1图库Gallery2代码分析数据加载流程

图片数据加载流程。Gallery---->GalleryActivity------>AlbumSetPage------->AlbumPage--------->PhotoPage相册集 照片集 某张图片1,AlbumSetPage.javaprivate void initializeData(Bundle data) {String mediaPath data…

python开课吧1980课程_开课吧的课程怎么样?

就那那些编程开发课来说。现在网络上充斥着大量的编程开发课程&#xff0c;什么python的&#xff0c;java的&#xff0c;c的&#xff0c;而且名字一个比一个夸张&#xff0c;21天精通c&#xff0c;7天熟练运用java&#xff0c;3天掌握python核心代码&#xff0c;这些课程标题简…

专业概念

1.JDBC: java数据库连接&#xff08;JDBC&#xff09;用于在java程序中实现数据库的操作功能&#xff0c;它提供了执行sql语句&#xff0c;访问各种数据库的方法&#xff0c;并为各种不同的数据库提供统一的操作接口&#xff0c;java.sql包中 包含了jdbc操作数据库的所有类 2.…

前端解决跨域问题的8种方案

2019独角兽企业重金招聘Python工程师标准>>> 1.同源策略如下&#xff1a; URL说明是否允许通信http://www.a.com/a.js http://www.a.com/b.js同一域名下允许http://www.a.com/lab/a.js http://www.a.com/script/b.js同一域名下不同文件夹允许http://www.a.com:8000/…

k歌的录音伴奏合成技术如何实现_K歌神器,用唱吧麦克风攀登天籁高峰

自从喜欢上了手机K歌&#xff0c;经常会上传一些自己的作品&#xff0c;起初无论音质如何都是乐在其中&#xff0c;可时间久了发现回放效果确实不如那榜单上的高手&#xff0c;究其原因想到了麦克风&#xff0c;网上一搜果然有各种K歌辅助工具&#xff0c;多番对比之下&#xf…

浅谈内存开辟问题和Block内存问题

我们知道&#xff0c;内存分为栈&#xff0c;堆&#xff0c;块。 栈中的内存由系统自己释放&#xff0c;堆是存对象初始化的地方&#xff0c;块是CPU与内存连接的缓冲器&#xff0c;运行速度比内存快&#xff0c;比CPU慢。 例如&#xff0c;我们NSMutableArray *array [NSMuta…

vue render函数_Vue原理解析(一):Vue到底是什么?

Vue&#xff0c;现在前端的当红炸子鸡&#xff0c;随着热度指数上升&#xff0c;实在是有必要从源码的角度&#xff0c;对它功能的实现原理一窥究竟。个人觉得看源码主要是看两样东西&#xff0c;从宏观上来说是它的设计思想和实现原理&#xff1b;微观上来说就是编程技巧&…

scrapy爬虫-setting.py

# Obey robots.txt rulesROBOTSTXT_OBEY False  不遵从网站的robots.txt法则 # See also autothrottle settings and docsDOWNLOAD_DELAY 3  每次下载延迟3秒&#xff0c;防止造成网站攻击 # Override the default request headers:DEFAULT_REQUEST_HEADERS { Accept:…

android点击左上角划出,使用Android中的Path和RectF在左上角右上角左下角绘制圆角...

有一个Path#addRoundRect()重载,它接受一个包含八个值的float数组,其中我们可以为四个角中的每一个指定x和y半径.这些值为[x,y]对,从左上角开始,顺时针绕其余部分.对于我们想要舍入的那些角,我们将该对的两个值都设置为半径值,并将它们保留为零,而不是那些.作为一个说明性示例,…

Nodejs微信开发

因为使用了Bot Framework开发了一个小功能&#xff0c;它目前支持了Skype\Teams\Slack等&#xff0c;但在国内来讲&#xff0c;微信还是一个比较流行的软件&#xff0c;所以需要接上微信 原来开发Bot的时候使用的是.Net开发的&#xff0c;这次我决定使用Nodejs开发一个简单的后…

性别有什么用_为啥不让男孩玩布娃娃?别让你的“性别偏见”,给孩子的人生设限...

在养育孩子的过程中&#xff0c;父母总是会犯许多错误&#xff0c;更是有一些错误会直接使孩子毁掉一生&#xff0c;而性别偏见正是很多家长都会去犯的错误&#xff0c;对男孩和女孩有着刻板印象&#xff0c;也正是因为这一点使孩子的潜力和天赋被压制。前几天我带着孩子去逛商…

android的时间代码怎么写,Android 日期和时间的使用实例详解

Android 日期和时间的使用日期和时间的使用&#xff1b;1&#xff1a;弹出框TimePickerDialog,DatePickerDialog2&#xff1a;组件TimePicker,DatePickerTimePickerDialog的使用&#xff1a;通过点击button显示图一&#xff0c;然后用户可以设置时间DatePickerDialog的使用只需…