修改的地方不多,如何让代码速度更快呢?对于搜索而言,我们可以尽量的减少解答树的层数,之前我在判断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)代码相关推荐

  1. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  2. 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告

    励志用少的代码做高效的表达. 题目(提交)链接→UVa-1594 本题为水题,因此侧重点从解题转变为优化. 注意点: 1.下一轮是按照上一轮的每个数做运算,但下一轮每次运算都会改变数列的值,造成运算不 ...

  3. Go代码调优利器-火焰图

    转自: https://lihaoquan.me/2017/1/1/Profiling-and-Optimizing-Go-using-go-torch.html Go代码调优利器-火焰图 go 调优 ...

  4. 【GameMaker】协程——异步执行代码

    协程 欢迎使用协程 什么是协程? 常见问题解答 协程可以在哪些平台上运行? 此代码库的许可证是什么?我可以将其用于商业项目吗? 我认为您缺少一个有用的功能,我希望您实现它! 我发现了一个错误,解决问题 ...

  5. Android 直播 播放器 IJK播放器低延时120ms

    基于上一篇文件rtmp推流<推流文章地址传送门>,需要解码播放器 ,由于是直播 所以需要延时优化到极致,采用播放器也是ijk开源播放器直接修改,目前测试1080p+音频延时效果如下图: 在 ...

  6. digit puzzle 数字谜 Uva12107

    题目 digit puzzle 数字谜 Uva12107 给一个不完整表达式,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,表达式中所有涉及的数必须是没有前导零的 ...

  7. IDEA中将代码块封装为方法,IDEA代码重构快捷键

    IDEA中将代码块封装为方法 选中要转换的代码块,快捷键: Windows快捷键:Alt + Shift + M Mac快捷键:Alt + Command + M 如图:

  8. IDEA自定义快捷指令,快捷生成代码、注释

    我们在使用idea时会发现有非常多的代码生成间接指令,比如输出指令.建主函数指令等等,只需要一个回车,代码就出来了,那我们能不能自定义这些东西呢?答案如下: 第一步,添加一个自定义组 第二步,单击新建 ...

  9. Alibaba代码规范插件、FindBugs插件安装及详解,IDEA插件安装,代码规范,代码查错,代码格式规范

    这是帮助开发者规范代码,培养优良的编码习惯的两个IDEA插件

最新文章

  1. react引入多个图片_重新引入React:v16之后的每个React更新都已揭开神秘面纱。
  2. linux 查看san链路状态,Linux下查看网络状态的方法
  3. initrd映像文档的作用和制作
  4. java 重定向和转发(转载)
  5. 怎么让修改的html持久化_redis持久化机制
  6. 技术详解:基于人脸识别的 AI 弹幕
  7. JavaScript下的进制转换
  8. CTabCtrl控件标签的相关设置
  9. Font Configuration and Customization for Open Source Systems - 白皮书翻译和深入
  10. 【报告分享】新基建专题报告:5g和数据中心的投资机会分析.pdf(附下载链接)...
  11. 将本地数据库备份到远程服务器
  12. spring源码:扫描bean的原理
  13. msys2 预编译的包 查询和下载
  14. java输入输出流实例代码
  15. 安全生产知识竞赛答题小程序
  16. linux命令关闭浏览器,linux命令行浏览器的使用方法
  17. MPP 与 Hadoop是什么关系?
  18. 支付清结算体系详解(17)
  19. Obj文件解析相关bug心得
  20. Xgboost简单原理推导(手写图片)

热门文章

  1. 借助模糊测试 深耕细作你的压力测试
  2. 【Java从0到架构师】项目实战 - 驾考(旧)- Freemarker、MyBatis-Plus
  3. HTML 与 CSS 总结
  4. AD域控Exchange邮箱(二)——卸载ExchangeServer2010报错:“有些控件无效 - 请指定要卸载的现有服务器” 解决方法
  5. WIN10 如何修改 文件后缀名 设置后缀名可修改
  6. 设计模式09_代理模式
  7. 当前主流量化平台整理201705版
  8. html页面锁屏,JavaScript网页锁屏效果源码实例
  9. 数据意识崛起,从企业应用看BI软件的未来发展
  10. 企业信息化必看,跨国集团采购部门的报表系统是怎样的