杭电-1015Safecracker(DFS) 电玩女神 2022-08-09 14:51 103阅读 0赞 # Safecracker # **Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)** Total Submission(s): 10906 Accepted Submission(s): 5584 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 题目没读完,大致懂了啥意思,就是前面给个数,后面给个字符串,A对应1,B对应2......,依次类推,要你跳出5个字符使得 v - w^2 + x^3 - y^4 + z^5 = target 必须要遍历所有的情况,所以dfs不解释! 另外,字典序的意思就是strcmp(s1,s2)>0就取s1 代码: #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #define INF 0x3f3f3f3f using namespace std; int t,len,used[100]; char str[100],best[6],str1[100]; int bes; bool is_solution(char s[]) { int r=s[0]-'A'+1-(s[1]-'A'+1)*(s[1]-'A'+1)+pow(s[2]-'A'+1,3)-pow(s[3]-'A'+1,4)+pow(s[4]-'A'+1,5); if(r==t) return true; return false; } void dfs(int x) { int i; if(x>=5) { if(is_solution(str1)) { if(strcmp(str1,best)>0) { for(i=0;i<5;i++) best[i]=str1[i]; } } return ; } else{ for(i=0;i<len;i++) { if(!used[i]) { str1[x]=str[i]; used[i]=1; dfs(x+1); used[i]=0; } } } } int main() { while(scanf("%d%s",&t,str),t&&strcmp(str,"END\0")) { memset(used,0,sizeof(used)); memset(best,'0',sizeof(best)); len=strlen(str); bes=INF; dfs(0); best[5]='\0'; if(best[0]=='0') printf("no solution\n"); else printf("%s\n",best); } return 0; }
相关 杭电1061 Rightmost Digit Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J 布满荆棘的人生/ 2022年09月17日 05:27/ 0 赞/ 262 阅读
相关 杭电-1015Safecracker(DFS) Safecracker Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ 电玩女神/ 2022年08月09日 14:51/ 0 赞/ 104 阅读
相关 杭电1039 Easier Done Than Said? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 一时失言乱红尘/ 2022年06月05日 12:48/ 0 赞/ 269 阅读
相关 杭电1026 Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 6553 快来打我*/ 2022年06月04日 05:53/ 0 赞/ 289 阅读
相关 杭电oj Problem Title 2 Pro. ID 1001 Sum Problem include<stdio.h> int main() { 缺乏、安全感/ 2022年05月15日 16:18/ 0 赞/ 251 阅读
相关 杭电oj Problem Title 1 Pro. ID 1000 A+B Problem include<stdio.h> int main() { £神魔★判官ぃ/ 2022年05月15日 16:14/ 0 赞/ 319 阅读
相关 杭电1060 此题是一道数学题,也是一道技巧题,也是不能直接算的,否则会超时的!!! 此题思路: 设n^n=d.xxxx\10^(k-1),其中k表示n^n的位数; d.xxxx 痛定思痛。/ 2021年12月01日 22:40/ 0 赞/ 307 阅读
相关 杭电2075 此题真的是简单的再不能简单了!呵呵!我一直纠结,出这样的题是什么意思呢?不懂!哎,不说那些废话了,直接 ac吧!呵呵! \include<iostream> using 今天药忘吃喽~/ 2021年12月01日 22:38/ 0 赞/ 288 阅读
相关 杭电2078 说实话,此题是一道有严重bug的问题,对于xhd没晚能复习的科目数m根本就没用上!!!哎不管那么些了,反正ac了!呵呵!此题这样想xhd得复习效率是前一课程和后一课程复习效率差 ╰+攻爆jí腚メ/ 2021年12月01日 22:38/ 0 赞/ 339 阅读
相关 杭电2090 此题就是一道令人无法琢磨的题!哎!!我简直就无语了!!呵呵!竟然能出这题。。。。 废话少说,直接ac!!! \\\ 此题要想输出结果,还需要注意一下! 在linux 约定不等于承诺〃/ 2021年12月01日 21:12/ 0 赞/ 349 阅读
还没有评论,来说两句吧...