HDOJ/HDU 1015 Safecracker(深搜)
Problem Description
=== Op tech briefing, 2002/11/02 06:42 CST ===
“The item is locked in a Klein safe behind a painting in the second-floor library. Klein safes are extremely rare; most of them, along with Klein and his factory, were destroyed in World War II. Fortunately old Brumbaugh from research knew Klein’s secrets and wrote them down before he died. A Klein safe has two distinguishing features: a combination lock that uses letters instead of numbers, and an engraved quotation on the door. A Klein quotation always contains between five and twelve distinct uppercase letters, usually at the beginning of sentences, and mentions one or more numbers. Five of the uppercase letters form the combination that opens the safe. By combining the digits from all the numbers in the appropriate way you get a numeric target. (The details of constructing the target number are classified.) To find the combination you must select five letters v, w, x, y, and z that satisfy the following equation, where each letter is replaced by its ordinal position in the alphabet (A=1, B=2, …, Z=26). The combination is then vwxyz. If there is more than one solution then the combination is the one that is lexicographically greatest, i.e., the one that would appear last in a dictionary.”
v - w^2 + x^3 - y^4 + z^5 = target
“For example, given target 1 and letter set ABCDEFGHIJKL, one possible solution is FIECB, since 6 - 9^2 + 5^3 - 3^4 + 2^5 = 1. There are actually several solutions in this case, and the combination turns out to be LKEBA. Klein thought it was safe to encode the combination within the engraving, because it could take months of effort to try all the possibilities even if you knew the secret. But of course computers didn’t exist then.”
=== Op tech directive, computer division, 2002/11/02 12:30 CST ===
“Develop a program to find Klein combinations in preparation for field deployment. Use standard test methodology as per departmental regulations. Input consists of one or more lines containing a positive integer target less than twelve million, a space, then at least five and at most twelve distinct uppercase letters. The last line will contain a target of zero and the letters END; this signals the end of the input. For each line output the Klein combination, break ties with lexicographic order, or ‘no solution’ if there is no correct combination. Use the exact format shown below.”
Sample Input
1 ABCDEFGHIJKL
11700519 ZAYEXIWOVU
3072997 SOUGHT
1234567 THEQUICKFROG
0 END
Sample Output
LKEBA
YOXUZ
GHOST
no solution
上个我用枚举做了,感觉不怎么好,毕竟是练算法的,就试试了深搜。
题意:
给你一个数,再给一个全部是大写字母构成的字符串。
从里面选5个字母v,m,x,y,z(不重复),计算v-m^2+x^3-y^4+z^4是否等于目标值
选出来的方案可能有很多种,那么你应该选择字典序最大的那种。
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static char handle[] = new char[6];
static char at[]={' ','A','B','C','D','E','F','G','H','I','J'
,'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
static char chs[];
static int target;
static String str;
static boolean map[];//标识是否已经用了
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//for(int i='A';i<='Z';i++){
//char c = (char)i;
//System.out.print("'"+c+"',");
//}
while(sc.hasNext()){
target = sc.nextInt();
str = sc.next();
if(target==0&&str.equals("END")){
return;
}
map = new boolean[str.length()];
chs = str.toCharArray();
Arrays.sort(chs);
for(int i=0,j=chs.length-1;i<chs.length/2;i++,j--){
char c=chs[i];
chs[i]=chs[j];
chs[j]=c;
}
if(dfs(0)){
for(int i=0;i<5;i++){
System.out.print(handle[i]);
}
System.out.println();
}else{
System.out.println("no solution");
}
}
}
private static boolean dfs(int m) {
if(m==5){
if( res(handle[0],handle[1],handle[2],handle[3],handle[4]) ){
return true;
}
return false;
}else{
for(int i=0;i<str.length();i++){
if(!map[i]){
map[i]=true;
handle[m]=chs[i];
if(dfs(m+1)){
return true;
}
map[i]=false;
}
}
}
return false;
}
private static boolean res(char a, char b, char c, char d, char e) {
int ap[] = new int[5];
for(int j=0;j<ap.length;j++){
for(int i=1;i<at.length;i++){
if(j==0){
if(a==at[i]){
ap[0]=i;
break;
}
}else
if(j==1){
if(b==at[i]){
ap[1]=i;
break;
}
}else
if(j==2){
if(c==at[i]){
ap[2]=i;
break;
}
}else
if(j==3){
if(d==at[i]){
ap[3]=i;
break;
}
}else
if(j==4){
if(e==at[i]){
ap[4]=i;
break;
}
}
}
}
int sum=0;
for(int i=0;i<ap.length;i++){
if(i%2==0){
sum+=Math.pow(ap[i], i+1);
}else{
sum-=Math.pow(ap[i], i+1);
}
}
if(sum==target){
return true;
}else{
return false;
}
}
}
HDOJ/HDU 1015 Safecracker(深搜)的更多相关文章
- HDOJ(HDU).1015 Safecracker (DFS)
HDOJ(HDU).1015 Safecracker [从零开始DFS(2)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1 ...
- HDOJ/HDU 1015 Safecracker(枚举、暴力)
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kle ...
- hdu 1015 Safecracker 水题一枚
题目链接:HDU - 1015 === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Klein s ...
- 题解报告:hdu 1015 Safecracker
Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kl ...
- hdu 1518 Square 深搜,,,,花样剪枝啊!!!
Square Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Su ...
- Block Breaker HDU - 6699(深搜,水,写下涨涨记性)
Problem Description Given a rectangle frame of size n×m. Initially, the frame is strewn with n×m squ ...
- HDU 1015 Safecracker
解题思路:这题相当诡异,样例没过,交了,A了,呵呵,因为理论上是可以通过的,所以 我交了一发,然后就神奇的过了.首先要看懂题目. #include<cstdio> #include< ...
- ZOJ 1403&&HDU 1015 Safecracker【暴力】
Safecracker Time Limit: 2 Seconds Memory Limit: 65536 KB === Op tech briefing, 2002/11/02 06:42 ...
- HDU 1015 Safecracker【数值型DFS】
Safecracker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
随机推荐
- 01_根据Id查询User的数据
[工程目录] [数据库表中内容 user表] [sqlMapConfig.xml配置文件主要内容] 简述:sqlMapConfig.xml配置文件主要有两个作用: 1.配置和数据连接的相关信息,例如事 ...
- wamp5 忘记mysql root密码 重置方法
wamp5比较恶心,忘记mysql root密码了,重新安装都没用,网上找了个文章可以修改root的密码. http://www.kuqin.com/database/20080306/4249.ht ...
- 用source code编译安装Xdebug
1. Unpack the tarball: tar -xzf xdebug-2.2.x.tgz. Note that you do not need to unpack the tarball i ...
- java中移位运算符:<<、>>和>>>之间的比较
一.说明 <<:运算符将二进制位进行左移操作 >>:运算符将二进制位进行右移操作 >>>:运算符将用0填空高位 二.举例 /** * *----------c ...
- init.d文件夹
/etc/init.d 是 /etc/rc.d/init.d 的软链接(soft link). [root@asus ~]# ll /etc/init.d lrwxrwxrwx. 1 root roo ...
- ECharts使用记
系统开发厂商一直都使用基于Flash的图表解决方案,例如Fushioncharts.本人也曾略做研究,当时对js不熟,只能采用静态xml方式,颇为繁琐. 自从了解了html5的新特性,意识到基于Can ...
- hadoop1 和haddop2 mapperreducer的wordcount详解
转 mapreduce中wordcount详细介绍(包括hadoop1和hadoop2版本) 发表于1年前(2014-04-24 10:08) 阅读(1458) | 评论(0) 1人收藏此文章, ...
- hadoop1中mapreduce原理详解
剖析Mapreduce作业运行机制:原理如下图: 原理图的解释的可以分为以下几个部分 1.客户端提交一个mapreduce的jar包给JobClient 2.JocClient通过RPC和JobTra ...
- Python 修饰器
描述:对于函数foo,使用修饰器修饰,在执行foo函数的同时统计执行时间.这样其他函数都可以使用此修饰器得到运行时间. (有返回值和没有返回值的函数要用不同的修饰器似乎) (对于有返回值的函数,不确定 ...
- Ubuntu15.10 编译VLC Android(安卓)过程记录
持续更新中... 最后一次修改于 2016-03-20 15:33:45 1.必要库的安装 除基本编译环境(gcc.g++等外),需要额外安装如下的库(用于下载必要的依赖文件) (1)JDK 推荐安装 ...