C . 【 例 题 3 】 虫 食 算




题目解析

正解 : Dfs + 剪枝


依题意,把样例以加法的形式展现出来.
根据加法的性质,可以得出有两种情况:有进位和没有进位的.
而从百位到最高位的结果,又可能是有从上一位进过一的.

因为三个字符串的长度都为

n

n

n,所以最高位是没有进一的根据以上的结论,容易得出

A

+

B

=

E

A

+

B

+

1

=

E

A+B=E ~~~||~~~A+B+1=E

A+B=E   ∣∣   A+B+1=E

代码思路:带有剪枝的深搜


Code

  1. #include <bits/stdc++.h>
  2. #define N 55
  3. using namespace std;
  4.  
  5. int n, ct;
  6. int a[N], b[N];
  7. char s[4][N];
  8.  
  9. void dfs (int x, int y, int t)
  10. {
  11. if (ct == 1) return ;
  12. if (y == -1)
  13. {
  14. if (t == 0)
  15. {
  16. for (int i = 0; i < n; ++ i) printf ("%d ", a[i]);
  17. ct = 1;
  18. }
  19. return ;
  20. }
  21. for (int i = y; i >= 0; -- i)
  22. {
  23. int a1 = a[s[1][i] - 'A'], a2=a[s[2][i] - 'A'], a3 = a[s[3][i] - 'A'];
  24. if (a1 == -1 || a2 == -1 || a3 == -1) continue;
  25. if ((a1 + a2) % n != a3 && (a1 + a2 + 1) % n != a3) return ;
  26. }
  27. if (a[s[x][y] - 'A'] < 0)
  28. {
  29. for (int i = n - 1; i >= 0; -- i)
  30. {
  31. if (b[i] == 0)
  32. {
  33. if (x != 3)
  34. {
  35. a[s[x][y] - 'A'] = i;
  36. b[i] = 1;
  37. dfs (x + 1, y, t);
  38. a[s[x][y] - 'A'] = -1;
  39. b[i] = 0;
  40. }
  41. else
  42. {
  43. int sum = a[s[1][y] - 'A'] + a[s[2][y] - 'A'] + t;
  44. if (sum % n != i) continue;
  45. b[i] = 1;
  46. a[s[x][y] - 'A'] = i;
  47. dfs (1, y - 1, sum / n);
  48. b[i] = 0;
  49. a[s[x][y] - 'A'] = -1;
  50. }
  51. }
  52. }
  53. return ;
  54. }
  55. if (x != 3)
  56. {
  57. dfs (x + 1, y, t);
  58. }
  59. else
  60. {
  61. int sum = a[s[1][y] - 'A'] + a[s[2][y] - 'A'] + t;
  62. if (sum % n != a[s[3][y] - 'A']) return ;
  63. dfs(1, y - 1, sum / n);
  64. }
  65. }
  66. int main ()
  67. {
  68. scanf ("%d", &n);
  69. for (int i = 1; i <= 3; ++ i) scanf ("%s", s[i]);
  70. memset (a, -1, sizeof (a));
  71. dfs (1, n - 1, 0);
  72. return 0;
  73. }

[深搜]C. 【例题3】虫食算的更多相关文章

  1. Luogu P1092 虫食算

    题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...

  2. P1092 虫食算(洛谷)

    今天做了一道题,我之前吹牛的时候曾经说:“这个题我觉得深搜剪枝一下就可以了.”. 我觉得我之前说的没错“这个题深搜剪枝亿下,再加点玄学就可以了!” 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子 ...

  3. 洛谷 P1092 虫食算 Label:dfs

    题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...

  4. codevs1064 虫食算

    题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045    +    8468#6 ...

  5. NOIP2004 虫食算

    描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子:43#9865#045+ 8468#6633= 44445506678其中#号代表 ...

  6. Codevs 1064 虫食算 2004年NOIP全国联赛提高组

    1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所谓虫食算,就是原先的算式 ...

  7. 【NOIP2004】【CJOJ1703】【洛谷1092】虫食算

    题面 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 ...

  8. 虫食算 2004年NOIP全国联赛提高组(dfs)

    1064 虫食算 2004年NOIP全国联赛提高组  时间限制: 2 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Descrip ...

  9. NOIP 2004 虫食算题解

    问题 E: [Noip2004]虫食算 时间限制: 1 Sec  内存限制: 128 MB 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一 ...

随机推荐

  1. SVG (viewBox) & DOM (viewport)

    SVG (viewBox) & DOM (viewport) circle "use strict"; /** * * @author xgqfrms * @license ...

  2. Flutter 使用高德地图定位

    amap_location 包 获取debug SHA1 // 使用debug.keystore获取debug SHA1 C:\Users\ajanuw\.android>keytool -li ...

  3. css整理之-----------布局相关

    文档流 文档流指的是元素排版布局过程中,元素会默认自动从左往右,从上往下的流式排列方式布局,文档流可以分为定位流.浮动流.普通流三种 普通流(Normal flow) 在常规流中,盒一个接着一个排列, ...

  4. Iterable object of JavaScript

    数组是可迭代的,所以数组可以用于for of,字符串也是可迭代的,所以字符串也可以用作for of,那么,对象呢? 试一试: var somebody = { start:0, end:100 } f ...

  5. VMware vSphere 虚拟化平台的安装及使用

    首先解释一下这些名词, vSphere是什么? vSphere 是VMware公司发布的一整套产品包,是VMware公司推出的一套服务器虚拟化解决方案,包含VMware ESXi hypervisor ...

  6. Android 开发学习进程0.28 腾讯TBS接入和相关问题

    TBS 的接入和使用 TBS 的接入 腾讯TBS是X5内核的升级版,可以当作webview 来打开 网页,可以以用来打开docx doc pdf 等文件,这里主要使用的是文件功能. 依赖接入 api ...

  7. C++ Primer Plus 第一章 预备知识

    C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...

  8. Newbe.Claptrap 框架入门,第一步 —— 开发环境准备

    Newbe.Claptrap 框架依托于一些关键性的基础组件和一些可选的辅助组件.本篇我们来介绍一下如何准备一个开发环境. Newbe.Claptrap 是一个用于轻松应对并发问题的分布式开发框架.如 ...

  9. 关于安装VMware以及Linux操作系统过程

    想用Linux完成部分教学作业,虚拟机是少不了的,所以首先选择了VMware进行安装. VMware在官网下载之后,就可以直接打开安装,但是在安装过程中,建议不要勾选启动时检查产品更新和加入VMwar ...

  10. 腾讯一面问我SQL语句中where条件为什么写上1=1

    目录 where后面加"1=1″还是不加 不用where 1=1 在多条件查询的困惑 使用where 1=1 的好处 使用where 1=1 的坏处 where后面加"1=1″还是 ...