HDU 1015 Safecracker (DFS)
题意:给一个数字n(n<=12000000)和一个字符串s(s<=17),字符串的全是有大写字母组成,字母的大小按照字母表的顺序,比如(A=1,B=2,......Z=26),从该字符串中选出5个字母,使得满足一下条件
v - w^2 + x^3 - y^4 + z^5 = n;
满足条件的可能有多组,请输出字典序最大的一组;
问题 :首先怎么找到满足条件的一组,一组字符串,对于每一个字符我们有两种选择 选||不选 ,然后在对每一个字符去进行这样的判断,然后把我们选好的5个字母在判断是否满足条件,但是这是你又会发现另外一个问题,就是它的解可能不是按照的字符串的顺序,这是我们就要想另外一种方法了,用一个vis[]数组标记每个字母,在用dfs去搜
其次是怎么输出字典序最大的呢,先对字符串进行排序,以从大到小排序,在找的过程中只要找到符合条件的一组就return;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int maxn = 25;
int vis[maxn], n, a[maxn],b[maxn], k;
char ch[maxn], d[maxn];
bool flag;
bool cmp(char p, char q) {
return p > q;
}
//v - w^2 + x^3 - y^4 + z^5 = target
void check() {
if (n == b[0] - b[1] * b[1] + b[2] * b[2] * b[2] - b[3] * b[3] * b[3] * b[3] + b[4] * b[4] * b[4] * b[4] * b[4]) {
flag = true;
}
return;
}
void dfs(int num) {
if (flag) return;
if (num == 5) {
check();
return;
}
for (int i = 0; i < k; i++) {
if (!vis[i] && !flag) {
vis[i] = 1;
b[num] = a[i];
dfs(num + 1);
vis[i] = 0;
}
}
}
int main() {
while (cin >> n >> ch && n && ch != "END") {
memset(vis, 0, sizeof(vis));
k = strlen(ch);
sort(ch, ch + k, cmp);
for (int i = 0; i < k; i++) {
a[i] = ch[i] - 'A' + 1;
}
flag = false;
dfs(0);
if (flag) {
for (int i = 0; i < 5; i++) {
d[i] = b[i] - 1 + 'A';
printf("%c", d[i]);
}
cout << endl;
}
else cout << "no solution" << endl;
}
}
HDU 1015 Safecracker (DFS)的更多相关文章
- HDU 5965 扫雷(dfs)题解
题意:给你一个3*n的格子,中间那行表明的是周围8格(当然左右都没有)的炸弹数量,上下两行都可以放炸弹,问你有几种可能,对mod取模 思路:显然(不),当i - 1和i - 2确定时,那么i的个数一定 ...
- HDOJ-1015 Safecracker(DFS)
http://acm.hdu.edu.cn/showproblem.php?pid=1015 题意:给出一个目标值target和一个由大写字母组成的字符串 A-Z分别对应权值1-26 要求从给出的字符 ...
- HDU 1518 Square(DFS)
Problem Description Given a set of sticks of various lengths, is it possible to join them end-to-end ...
- Hdu 1175 连连看(DFS)
Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1175 因为题目只问能不能搜到,没问最少要几个弯才能搜到,所以我采取了DFS. 因为与Hdu ...
- hdu 2821 Pusher (dfs)
把这个写出来是不是就意味着把 http://www.hacker.org/push 这个游戏打爆了? ~啊哈哈哈 其实只要找到一个就可以退出了 所以效率也不算很低的 可以直接DFS呀呀呀呀 ...
- hdu 2821 Pusher(dfs)
Problem Description PusherBoy is an online game http://www.hacker.org/push . There is an R * C grid, ...
- HDU 1501 Zipper(DFS)
Problem Description Given three strings, you are to determine whether the third string can be formed ...
- HDU 5305 Friends(dfs)
Friends Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Su ...
- HDOJ(HDU).1015 Safecracker (DFS)
HDOJ(HDU).1015 Safecracker [从零开始DFS(2)] 从零开始DFS HDOJ.1342 Lotto [从零开始DFS(0)] - DFS思想与框架/双重DFS HDOJ.1 ...
随机推荐
- JSON在线格式化 jsoneditor使用
const placeholder = { string: 'hello world!', boolean: true, color: '#6c928c', number: 123, null: nu ...
- 关于程序null值的见解
今天遇到了一个问题,查询一条数据,返回用list接,发现少了2个值(ssh框架).执行SQL少的这两个字段的值为null.上图说明一下: 可以看到第一次查询没有角标38.39的值. 是同一条SQL,第 ...
- Eclipse中代码自动添加注释及代码注释模板
介绍 为了提高代码的可读性以及为了有些代码有洁癖的人的需求,我们要从学生到职业进行迈进的过程中,必须把以前的那种代码可读性不高的习惯改掉,因为我们必须要与企业接轨.. 好了,废话不多说,反正就是提升自 ...
- 分布式ID系列(3)——数据库自增ID机制适合做分布式ID吗
数据库自增ID机制原理介绍 在分布式里面,数据库的自增ID机制的主要原理是:数据库自增ID和mysql数据库的replace_into()函数实现的.这里的replace数据库自增ID和mysql数据 ...
- springboot-jsp打jar问题
[**前情提要**]最近做了一个项目,项目是springboot+jsp结构的,但是在发布生产环境的时候又需要用maven打成jar包,但是一开始的默认配置都不成功.下面的文章就是具体的解决过程. - ...
- 利用反射,更改string对象的value数组以达到改变string值。
package test; import java.lang.reflect.Field; import lombok.Value; public class Test1{ public static ...
- ethtool工具使用实例
使用ethtool工具可以查看和修改网卡(NIC卡)设备配置,下面我们来看ethtool的具体用法. 1.显示网卡属性 ethtool命令后直接跟网卡名称,可以显示关于该网卡的属性值: # ethto ...
- python编写环境(种类)
python编写环境(种类) 官方推荐 cpython 转成C的字节码 jython转成Java的字节码 ironpython转成C#字节码 pypy转换成动态编译 开发快,运行快
- windows下通过idea连接hadoop和spark集群
###windows下链接hadoop集群 1.假如在linux机器上已经搭建好hadoop集群 2.在windows上把hadoop的压缩包解压到一个没有空格的目录下,比如是D盘根目录 3.配置环境 ...
- Could not determine type for java util List
问题场景:在实体类中需要使用List集合存储字段,启动时找不到List类型 问题解决:在字段上添加@ElementColletion(targetClass=String.class)表示是一个集合映 ...