hdu4403暴力搜索
题意:
给你一个数字串,让你在里面添加一个=和若干个+,使等式成立.
思路:
lmax最大是15,直接暴搜,无压力,关键是判重,要在答案的时候判重,一开始在进队列之前判的,各种wa,哎!后来才发现如果在之前判断就不能得到当前什么符号都不加,而下一个有符号了,判重我用的是map,随意什么只要别爆内存就行,水搜索竟然调了2个小时,丢脸啊...
#include<stdio.h>
#include<string.h>
#include<queue>
#include<map>
using namespace std; typedef struct
{
int mk[16];
char str[16];
int nowid ,deng;
}NODE; NODE xin ,tou;
int nn;
map<__int64 ,__int64>mark; bool MK(NODE aa)
{
__int64 sum = 0;
for(int i = 0 ;i <= nn ;i ++)
sum = sum * 10 + aa.mk[i];
if(mark[sum]) return 1;
mark[sum] = 1;
return 0;
} bool ok(NODE tou)
{
if(tou.deng)
{
int l ,r;
l = r = 0;
int sum = 0;
int mki;
for(int i = 0 ;tou.mk[i] != 2 ;i ++)
{
if(tou.mk[i] == 1)
{
l += sum;
sum = tou.str[i] - 48;
}
else
{
sum = sum * 10 + tou.str[i] - 48;
}
mki = i;
}
l += sum;
sum = 0;
for(int i = mki + 1;i <= nn ;i ++)
{
if(tou.mk[i] == 1)
{
r += sum;
sum = tou.str[i] - 48;
}
else
{
sum = sum * 10 + tou.str[i] - 48;
}
}
r += sum;
return l == r && !MK(tou);
}
return 0;
} int BFS()
{
memset(xin.mk ,0 ,sizeof(xin.mk));
nn = strlen(xin.str) - 1;
xin.nowid = 0;
xin.deng = 0;
queue<NODE>q;
q.push(xin);
int ans = 0;
mark.clear();
while(!q.empty())
{
tou = q.front();
q.pop();
if(ok(tou))
ans ++;
if(tou.nowid == nn) continue;
if(!tou.deng)// =
{
xin = tou;
xin.deng = 1;
xin.nowid = tou.nowid + 1;
xin.mk[xin.nowid] = 2;
q.push(xin);
} //+
xin = tou;
xin.deng = tou.deng;
xin.nowid = tou.nowid + 1;
xin.mk[xin.nowid] = 1;
q.push(xin); //
xin = tou;
xin.deng = tou.deng;
xin.nowid = tou.nowid + 1;
xin.mk[xin.nowid] = 0;
q.push(xin);
}
return ans;
} int main ()
{
while(~scanf("%s" ,xin.str) && strcmp("END" ,xin.str))
{
printf("%d\n" ,BFS());
}
return 0;
}
hdu4403暴力搜索的更多相关文章
- ACM 暴力搜索题 题目整理
UVa 129 Krypton Factor 注意输出格式,比较坑爹. 每次要进行处理去掉容易的串,统计困难串的个数. #include<iostream> #include<vec ...
- hdu 4740 The Donkey of Gui Zhou(暴力搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4740 [题意]: 森林里有一只驴和一只老虎,驴和老虎互相从来都没有见过,各自自己走过的地方不能走第二次 ...
- hdu 1427 速算24点 dfs暴力搜索
速算24点 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem De ...
- 随手练——洛谷-P1151(枚举与暴力搜索)
枚举 #include <iostream> using namespace std; int main() { ; cin >> k; ; i < ; i++) { ) ...
- 枚举进程——暴力搜索内存(Ring0)
上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
- [luogu 1092] 虫食算 (暴力搜索剪枝)
传送门 Description Input 包含四行. 第一行有一个正整数 (N≤26). 后面的三行,每行有一个由大写字母组成的字符串,分别代表两个加数以及和.这3个字符串左右两端都没有空格,从高位 ...
- HDU 3131 One…Two…Five! (暴力搜索)
题目链接:pid=3131">HDU 3131 One-Two-Five! (暴力搜索) 题意:给出一串数字,要求用加,减,乘,除(5/2=2)连接(计算无优先级:5+3*6=8*6= ...
- 吴裕雄 python 机器学习——模型选择参数优化暴力搜索寻优GridSearchCV模型
import scipy from sklearn.datasets import load_digits from sklearn.metrics import classification_rep ...
- POJ 1129:Channel Allocation 四色定理+暴力搜索
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13357 Accepted: 68 ...
随机推荐
- SpringMVC异步处理的 5 种方式
作者:丁仪 来源:https://chengxuzhixin.com/blog/post/SpringMVC-yi-bu-chu-li-de-5-zhong-fang-shi.html 前段时间研究了 ...
- 剑指 Offer 04. 二维数组中的查找 (思维)
剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...
- HDOJ-1213(简单并查集)
How many tables HDOJ-1213 #include<iostream> #include<cstring> #include<cstdio> #i ...
- 设计模式之工厂方法模式(Factory Method Pattern)
一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...
- 使用egg.js开发后端API接口系统
什么是Egg.js Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本.详细的了解可以参考Egg.js的官网:https:// ...
- 单链表及基本操作(C语言)
#include <stdio.h> #include <stdlib.h> /** * 含头节点单链表定义及基本操作 */ //基本操作函数用到的状态码 #define TR ...
- 如何学习python爬虫
分享网易云课堂上一个不错的视频教学:http://study.163.com/course/courseMain.htm?courseId=1003285002
- 攻防世界 resver catch-me
catch-me asis-ctf-quals-2016 附件给了个压缩包文件,重命名,解压,获取到elf文件 程序有两处关键比较 第一处: 这里进行动态调试,得到v3=0xB11924E1, byt ...
- 创建Maven父子项目以及它们的优点
此文引用:https://blog.csdn.net/zxl8876/article/details/104180133 创建maven父子项目 第一步创建父项目: 新建一个普通的maven项目 删除 ...
- [go-linq]-Go的.NET LINQ式查询方法
关于我 我的博客|文章首发 开发者的福音,go也支持linq了 坑爹的集合 go在进行集合操作时,有很不舒服的地方,起初我真的是无力吐槽,又苦于找不到一个好的第三方库,只能每次写着重复代码.举个栗子 ...