UVa12107 (120ms)代码
修改的地方不多,如何让代码速度更快呢?对于搜索而言,我们可以尽量的减少解答树的层数,之前我在判断dfs是否有唯一解时搜索的
深度为8后来经过优化后深度为4,这样快了许多。
// UVa 12107 // IDA* + 剪枝 #include <cstdio> #include <cstring> #include <string> #include <set> using namespace std; const char alpha[] = { '*', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };int c1, c2, c3, cnt, maxd; char str[20], ans[20]; set<string> Set; bool Vis() { if (str[0] == '0' || str[c1] == '0' || str[c2] == '0') return false; if (str[c1-1] != '*' && str[c2-1] != '*' && str[c3-1] != '*') {int a = str[c1-1] - '0', b = str[c2-1] - '0', c = str[c3-1] - '0'; return (a*b) % 10 == c; }return true; }bool Vis1() {int a = 0, b = 0, c = 0; for (int i = 0; i < c1; ++i) a = a * 10 + str[i] - '0'; for (int i = c1; i < c2; ++i) b = b * 10 + str[i] - '0'; c = a * b; for (int i = c3-1; i >= c2; --i) {if (!c) return false; int d = c % 10; c /= 10; if (str[i] != '*' && str[i] - '0' != d) return false; }if (c) return false; return true; } void dfs1(int from) {int i;for (i = from; i < strlen(str); ++i) if (str[i] == '*') break; if (i >= c2) { if (Vis1()) ++cnt;return;} for (int j = 1; j < 11; ++j) {char temp = str[i]; str[i] = alpha[j]; if (Vis()) dfs1(i+1); str[i] = temp; if (cnt > 1) return; } }bool better() {for (int i = 0; i < c3; ++i) if (str[i] != ans[i]) {return ans[i] == ' ' || str[i] < ans[i]; }return false; } bool dfs(int d, int from) { if (d == maxd) { cnt = 0; memcpy(ans, str, sizeof(ans)); if (Vis()) dfs1(0); return cnt == 1; } if (from == c3) return false; for (int j = 0; j < 11; ++j) { char temp = str[from]; if (str[from] == alpha[j])if (dfs(d, from+1)) return true; if (str[from] != alpha[j]) {str[from] = alpha[j];if (dfs(d+1, from+1)) return true; }str[from] = temp; }return false; }int main() { int kase = 0; char a[10], b[10], c[10]; while (scanf("%s", a) == 1 && a[0] != '0') {scanf("%s%s", b, c);c1 = strlen(a), c2 = strlen(a) + strlen(b), c3 = strlen(a) + strlen(b) + strlen(c); memcpy(str, a, sizeof(a)); strcat(str, b), strcat(str, c);for (int i = 0; i < c3; ++i) ans[i] = ' '; char rem[20];memcpy(rem, str, sizeof(rem)); for (maxd = 0; ; ++maxd) {Set.clear(); if (dfs(0, 0)) break; memcpy(str, rem, sizeof(str)); }printf("Case %d: ", ++kase);for (int i = 0; i < c1; ++i) printf("%c", ans[i]);printf(" ");for (int i = c1; i < c2; ++i) printf("%c", ans[i]);printf(" ");for (int i = c2; i < c3; ++i) printf("%c", ans[i]); printf("\n"); }return 0; }
转载于:https://www.cnblogs.com/yifeiWa/p/11134719.html
UVa12107 (120ms)代码相关推荐
- 隐私合规:收集SDK部分介绍
com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...
- 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告
励志用少的代码做高效的表达. 题目(提交)链接→UVa-1594 本题为水题,因此侧重点从解题转变为优化. 注意点: 1.下一轮是按照上一轮的每个数做运算,但下一轮每次运算都会改变数列的值,造成运算不 ...
- Go代码调优利器-火焰图
转自: https://lihaoquan.me/2017/1/1/Profiling-and-Optimizing-Go-using-go-torch.html Go代码调优利器-火焰图 go 调优 ...
- 【GameMaker】协程——异步执行代码
协程 欢迎使用协程 什么是协程? 常见问题解答 协程可以在哪些平台上运行? 此代码库的许可证是什么?我可以将其用于商业项目吗? 我认为您缺少一个有用的功能,我希望您实现它! 我发现了一个错误,解决问题 ...
- Android 直播 播放器 IJK播放器低延时120ms
基于上一篇文件rtmp推流<推流文章地址传送门>,需要解码播放器 ,由于是直播 所以需要延时优化到极致,采用播放器也是ijk开源播放器直接修改,目前测试1080p+音频延时效果如下图: 在 ...
- digit puzzle 数字谜 Uva12107
题目 digit puzzle 数字谜 Uva12107 给一个不完整表达式,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,表达式中所有涉及的数必须是没有前导零的 ...
- IDEA中将代码块封装为方法,IDEA代码重构快捷键
IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:
- IDEA自定义快捷指令,快捷生成代码、注释
我们在使用idea时会发现有非常多的代码生成间接指令,比如输出指令.建主函数指令等等,只需要一个回车,代码就出来了,那我们能不能自定义这些东西呢?答案如下: 第一步,添加一个自定义组 第二步,单击新建 ...
- Alibaba代码规范插件、FindBugs插件安装及详解,IDEA插件安装,代码规范,代码查错,代码格式规范
这是帮助开发者规范代码,培养优良的编码习惯的两个IDEA插件
最新文章
- react引入多个图片_重新引入React:v16之后的每个React更新都已揭开神秘面纱。
- linux 查看san链路状态,Linux下查看网络状态的方法
- initrd映像文档的作用和制作
- java 重定向和转发(转载)
- 怎么让修改的html持久化_redis持久化机制
- 技术详解:基于人脸识别的 AI 弹幕
- JavaScript下的进制转换
- CTabCtrl控件标签的相关设置
- Font Configuration and Customization for Open Source Systems - 白皮书翻译和深入
- 【报告分享】新基建专题报告:5g和数据中心的投资机会分析.pdf(附下载链接)...
- 将本地数据库备份到远程服务器
- spring源码:扫描bean的原理
- msys2 预编译的包 查询和下载
- java输入输出流实例代码
- 安全生产知识竞赛答题小程序
- linux命令关闭浏览器,linux命令行浏览器的使用方法
- MPP 与 Hadoop是什么关系?
- 支付清结算体系详解(17)
- Obj文件解析相关bug心得
- Xgboost简单原理推导(手写图片)
热门文章
- 借助模糊测试 深耕细作你的压力测试
- 【Java从0到架构师】项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus
- HTML 与 CSS 总结
- AD域控Exchange邮箱(二)——卸载ExchangeServer2010报错:“有些控件无效 - 请指定要卸载的现有服务器” 解决方法
- WIN10 如何修改 文件后缀名 设置后缀名可修改
- 设计模式09_代理模式
- 当前主流量化平台整理201705版
- html页面锁屏,JavaScript网页锁屏效果源码实例
- 数据意识崛起,从企业应用看BI软件的未来发展
- 企业信息化必看,跨国集团采购部门的报表系统是怎样的