题意:有两个图,每一列都存在的字母选作密码,就第k大的密码

思路:
找出各个位置上的密码,

假设:

第1个字母只能是{A,C,D,W},

第2个字母只能是{B,O,P},

第3个字母只能是{G,M,O,X},

第4个字母只能是{A,P},

第5个字母只能是{G,S,U}。
不管第1个字母是多少,后4个字母都有3*4*2*3=72种可能,因此当k≤72时,第1个字母
是A,当72<k≤144时第1个字母是C,如此等等。再用同样的方法确定第2,3,4,5个字母即
可。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <map>
#include <vector>
using namespace std;
typedef long long ll;
typedef unsigned long long ull; char tmap[2][20][10];
vector<char>mp[10];
int vis[2][20][30];//第i个图,第j列的x字母 int num[10];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int k;
scanf("%d",&k);
memset(vis,0,sizeof(vis));
for(int j = 0; j < 2; j++)
for(int i = 0; i < 6; i ++)
scanf("%s",tmap[j][i]);
for(int i=0; i<5; ++i)
for(int j=0; j<6; ++j)
{
vis[0][i][tmap[0][j][i]-'A']=true;
vis[1][i][tmap[1][j][i]-'A']=true;
}
for(int i = 0;i < 5;i++)
mp[i].clear();
for(int i = 0;i < 5;i++)
{
for(int j = 0;j <= 26;j++)
{
if( vis[0][i][j] && vis[1][i][j])
mp[i].push_back(j + 'A');
}
}
num[5] = 1;
for(int i = 4; i >= 0; i--)
{
num[i] = num[i+1] * (int)mp[i].size();
}
if(k > num[0])
printf("NO\n");
else
{
k--;
for(int i = 0; i < 5; i++)
{
putchar(mp[i][k/num[i+1]]);
k %= num[i+1];
}
printf("\n");
}
}
return 0;
}

  

最新文章

  1. DotNet生成随机数的一些方法
  2. hdoj 5139Formula
  3. [zz] 基于国家标准的 EndNote 输出样式模板
  4. 浅谈Oracle表之间各种连接
  5. EC2.0开启多规格后,编辑无法获取规格数据
  6. Android登陆界面实现-支持输入框清楚和震动效果功能
  7. Lists.newArrayList的一个小坑
  8. Debian Security Advisory(Debian安全报告) DSA-4407-1 xmltooling
  9. flask 连接mysql及基本操作
  10. 『TensorFlow』使用集合collection控制variables
  11. iOS开发笔记(Swift)-通用App安装引导页的实现
  12. 环境变量GOBIN导致GoClipse运行出现异常
  13. JSTL标签用法:&lt;c:choose&gt;&lt;c:forEach&gt;&lt;c:if&gt;&lt;c:when&gt;&lt;c:set&gt;
  14. hdu1224 dp(dp + 栈/父亲数组记录路径)
  15. linux环境下编译C++ 程序
  16. python 获取5天前的日期
  17. Linux配置 xampp下的https证书(腾讯云申请)
  18. CFile用法(转)
  19. ndoutils_mq项目: 发送Nagios的性能、报警、配置文件到RabbitMQ
  20. 最少的硬币数量组合出1到m之间的任意面值(贪心算法)

热门文章

  1. MySort实验报告
  2. Android属性动画 nineoldandroids
  3. ruby:TypeError: 对象不支持此属性或方法
  4. 从数据恢复角度解析RAID6结构原理
  5. 调用WCF时,调用已超过传入消息(65536)的最大消息大小配额。若要增加配额,请使用相应绑定。
  6. Map集合、散列表、红黑树介绍
  7. python API验证
  8. SQL server2017的操作(练习题)
  9. 重拾Python(3):Pandas之Series对象的使用
  10. 浅谈linux静态库、动态库。