HDU-1015,Safecracker

简介: 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


解题思路:


先将字符串按照字典序去排序,然后根据题意:v-w^2+x^3-y^4+z^5=目标,五个for循环去寻找,找到满足题意的输出即可,如果找不到则输出no solution。


程序代码:


#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
char str[25];
bool cmp(char a,char b)
{
    return a>b;
}
int main()
{
    int a,b,c,d,e,ta,tb,tc,td,te,target,flag;
    while(scanf("%d %s",&target,str))
    {
        if(target==0)
            break;
        int len=strlen(str);
        flag=0;
        sort(str,str+len,cmp);
        for(a=0;a<len;a++)
        {
            for(b=0;b<len;b++)
            {
                if(a==b)
                    continue;
                for(c=0;c<len;c++)
                {
                    if(a==c||b==c)
                        continue;
                    for(d=0;d<len;d++)
                    {
                        if(a==d||b==d||c==d)
                            continue;
                        for(e=0;e<len;e++)
                        {
                            if(a==e||b==e||c==e||d==e)
                                continue;
                            ta=str[a]-'A'+1;
                            tb=str[b]-'A'+1;
                            tc=str[c]-'A'+1;
                            td=str[d]-'A'+1;
                            te=str[e]-'A'+1;
                            if(ta-tb*tb+tc*tc*tc-td*td*td*td+
                                te*te*te*te*te==target)
                            {
                                flag=1;
                                printf("%c%c%c%c%c\n",str[a],
                                    str[b],str[c],str[d],str[e]);
                                break;    
                            }
                        }
                        if(flag)
                            break;
                    }
                    if(flag)
                        break;
                }
                if(flag)
                    break;
            }
            if(flag)
                break;
        }
        if(flag==0)
            printf("no solution\n");
    }
    return 0;
}


相关文章
|
存储 缓存 算法
【数据结构查找算法篇】----散列查找【实战项目】
【数据结构查找算法篇】----散列查找【实战项目】
236 10
|
传感器 编解码 监控
毕业设计 基于51单片机老人防跌倒GSM短信报警系统
毕业设计 基于51单片机老人防跌倒GSM短信报警系统
619 0
毕业设计 基于51单片机老人防跌倒GSM短信报警系统
|
数据采集 缓存 Java
电商项目之 flume 数据同步总结|学习笔记
快速学习电商项目之 flume 数据同步总结
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
14天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
577 212
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
232 138
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
814 59