HDU 1015 Safecracker(第一次用了搜索去遍历超时,第二次用for循环可以了,思路一样的)
来源:互联网 发布:彗星dns优化器官方 编辑:程序博客网 时间:2024/06/05 09:04
Safecracker
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 3 Accepted Submission(s) : 1
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."
"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 ABCDEFGHIJKL11700519 ZAYEXIWOVU3072997 SOUGHT1234567 THEQUICKFROG0 END
Sample Output
LKEBAYOXUZGHOSTno solution
1.lexicographical order:cap < card < cat < to < too< two < up
2.其实是个组合问题12*11*10*9*8大约十几万次当然5个循环不超时,用搜索的形式写的时候因为递归和回溯耗时,所以超时
3.代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int t;char s[20];int a[10];int len;bool flag;int cmp(int a,int b){ return a>b;}void Find(){ for(int i=1; i<=len; i++) { a[1]=s[i]-'A'+1; for(int j=1; j<=len; j++) { if(i==j) continue; a[2]=s[j]-'A'+1; for(int k=1; k<=len; k++) { if(j==k||k==i) continue; a[3]=s[k]-'A'+1; for(int l=1; l<=len; l++) { if(l==k||l==j||l==i) continue; a[4]=s[l]-'A'+1; for(int m=1; m<=len; m++) { if(m==l||m==k||m==j||m==i) continue; a[5]=s[m]-'A'+1; if(a[1]-a[2]*a[2]+a[3]*a[3]*a[3]-a[4]*a[4]*a[4]*a[4]+a[5]*a[5]*a[5]*a[5]*a[5]==t) { flag=1; break; } } if(flag) break; } if(flag) break; } if(flag) break; } if(flag) break; }}int main(){ while(scanf("%d%s",&t,s+1)==2) { if(t==0&&strcmp("END",s+1)==0) { break; } else { len=strlen(s+1); flag=0; sort(s+1,s+1+len,cmp);//保证答案是字典序上最大 Find(); if(flag) printf("%c%c%c%c%c\n",a[1]+'A'-1,a[2]+'A'-1,a[3]+'A'-1,a[4]+'A'-1,a[5]+'A'-1); else printf("no solution\n"); } } return 0;}
0 0
- HDU 1015 Safecracker(第一次用了搜索去遍历超时,第二次用for循环可以了,思路一样的)
- POJ-1088滑雪,典型的动态规划题,与NYOJ-10skiing一样,但NYOJ上时限是3s,用搜索可以过,但在POJ上就超时了~~
- hdu 1015 Safecracker 搜索
- HDU 1015Safecracker(算是很简单的dfs了,却debug了很久很久)
- HDU 1015 Safecracker DFS搜索
- HDU 1015 Safecracker(DFS搜索)
- hdu-1015-深度搜索-Safecracker
- ArrayList可以用for循环遍历,LinkedList不要用for循环遍历
- bbed for windows 终于可以用了
- HDOJ-1015(Safecracker)(多重for循环)
- java数组逆序用for循环,for循环的初始化语句定义了两个变量
- jquery checkbox checked 第一次有效果 第二次以后就不好用了
- jquery checkbox checked 第一次有效果 第二次以后就不好用了
- 终于可以去好好的学习了
- 真的可以去上海了
- HDU 1015 Safecracker (简单搜索题)
- 我要去兰州了,第一次去
- 用for循环去重
- 总结
- Andorid动画——属性动画
- MFC时间控件CDataTimeCtrl使用
- shell脚本标准输出赋值给变量
- openssl加密 适用于 php+Java/Android
- HDU 1015 Safecracker(第一次用了搜索去遍历超时,第二次用for循环可以了,思路一样的)
- Android Studio教程03-项目目录以及文件的详解
- android ICS式下拉菜单实现详解 PopupWindow
- 彻底理解webservice SOAP WSDL
- 有序数组的合并 c++模板实现
- JAVA正则表达式的捕获组、back引用、"$n"
- php 全局变量
- 跑酷入门
- 结合游戏 简单介绍 Material Animator Controller position scale等