链接:

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

题意:

给两个6行5列的字母矩阵,找出满足如下条件的“密码”:密码中的每个字母在两个矩阵的对应列中均出现。
例如,左数第2个字母必须在两个矩阵中的左数第2列中均出现。
给定k(1≤k≤7777),你的任务是找出字典序第k小的密码。如果不存在,输出NO。

分析:

经典的解码问题。首先求出答案每一列的所有可能字母,然后逐位解码即可。
具体实现见代码。

代码:

 import java.io.*;
import java.util.*; public class Main {
static char G[][][] = new char[2][6][9]; public static void main(String args[]) {
Scanner cin = new Scanner(new BufferedInputStream(System.in)); int T = cin.nextInt();
while(T --> 0) {
int k = cin.nextInt();
cin.nextLine(); // 清空缓存区
for(int t = 0; t < 2; t++) {
for(int r = 0; r < 6; r++) {
G[t][r] = cin.nextLine().toCharArray();
}
} @SuppressWarnings("unchecked")
ArrayList<Character> a[] = new ArrayList[5]; // a[c]: 答案第c列的所有可能字母
for(int i = 0; i < 5; i++) a[i] = new ArrayList<Character>(); boolean has[][][] = new boolean[2][5][26]; // 第t个矩阵的第c列是否有字母ch
for(int c = 0; c < 5; c++) {
for(int t = 0; t < 2; t++) {
for(int r = 0; r < 6; r++) {
int ch = G[t][r][c] - 'A';
has[t][c][ch] = true;
}
}
for(int i = 0; i < 26; i++)
if(has[0][c][i] && has[1][c][i]) a[c].add((char)(i+'A'));
} int up = 1;
for(int i = 0; i < 5; i++) up *= a[i].size();
if(k > up) {
System.out.println("NO");
continue;
} k--; // 解码
for(int i = 0; i < 5; i++) {
up /= a[i].size();
System.out.print(a[i].get(k/up));
k %= up;
}
System.out.println();
}
cin.close();
}
}

UVa 1262 - Password(解码)的更多相关文章

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

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

  2. UVA 1262 Password 暴力枚举

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

  3. UVA 1262 Password

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

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

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

  5. UVA - 1262 数学

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

  6. UVa 1262 (第k字典序) Password

    题意: 给出两个6行5列的字母矩阵,一个密码满足:密码的第i个字母在两个字母矩阵的第i列均出现. 然后找出字典序为k的密码,如果不存在输出NO 分析: 我们先统计分别在每一列均在两个矩阵出现的字母,然 ...

  7. UVA 213 信息解码(二进制&位运算)

    题意: 出自刘汝佳算法竞赛入门经典第四章. 考虑下面的01串序列: 0, 00, 01, 10, 000, 001, 010, 011, 100, 101, 110, 0000, 0001, …, 1 ...

  8. UVa 902 - Password Search

    题目:给你一个小写字母组成大的串和一个整数n.找到里面长度为n出现最频繁的子串. 分析:字符串.hash表.字典树. 这里使用hash函数求解,仅仅做一次扫描就可以. 说明:假设频率同样输出字典序最小 ...

  9. 紫书 例题 10-8 UVa 1262 (暴力枚举)

    递归一遍遍历所有情况就ok了 #include<cstdio> #include<cstring> #define REP(i, a, b) for(int i = (a); ...

随机推荐

  1. jQuery 的动画效果图片----隐藏打开方法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Mysql插入Emoji表情出错

    Caused by: java.sql.SQLException: Incorrect at com.mysql.jdbc.SQLError.createSQLException(SQLError.j ...

  3. SQL中的函数以及实例

    AVG (平均) COUNT (计数) MAX (最大值) MIN (最小值) SUM (总合) 运用函数的语法是: selecte  "函数名"("列名") ...

  4. Linux下剪切拷贝命令

    Linux下剪切拷贝命令   命令格式: mv   source    dest   mv: 命令字   source: 源文件   dest: 目的地址   Linux下拷贝命令   命令格式:cp ...

  5. struts1 & jquery form 文件异步上传

    1.概述 还在用struts1?是的,在地球的没写地方,落后的生产方式还在运转(老项目). 从 继承org.apache.struts.action.Action, 继承org.apache.stru ...

  6. JavaScript的进阶之路(一)

    JavaScript由ECMAScript BOM DOM三部分组成 ECMAScript重要版本1,3,5,6,提供核心语言功能 DOM提供访问和操作网页内容的方法和接口 BOM提供与浏览器交互的的 ...

  7. Linux下C语言操作MySQL数据库

    MySQL是Linux系统下广泛使用的开源免费数据库,是Linux应用程序数据存储的首选. Ubuntu下安装 […]

  8. hihoCoder 1148 2月29日

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: ...

  9. 寒假来了,阿里游戏云6000、20000元新春大礼,游戏开发的骚年们r u ready?

    寒假来了,游戏开发的骚年们,r u ready? 亿元云计算基金.游戏云计算解决方案.尊享VIP服务,为你“三羊开泰”! 现在参与游戏云认证,即享6000元.2万元… 最高100万云基金!走你> ...

  10. SharePoint 2013 - REST API about Security

    1. 获取当前用户信息(current user): var currentUserInfo = "{0}/_api/Web/CurrentUser"; // {0} -> ...