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

#include <bits/stdc++.h>
#define N 55
using namespace std; int n, ct;
int a[N], b[N];
char s[4][N]; void dfs (int x, int y, int t)
{
if (ct == 1) return ;
if (y == -1)
{
if (t == 0)
{
for (int i = 0; i < n; ++ i) printf ("%d ", a[i]);
ct = 1;
}
return ;
}
for (int i = y; i >= 0; -- i)
{
int a1 = a[s[1][i] - 'A'], a2=a[s[2][i] - 'A'], a3 = a[s[3][i] - 'A'];
if (a1 == -1 || a2 == -1 || a3 == -1) continue;
if ((a1 + a2) % n != a3 && (a1 + a2 + 1) % n != a3) return ;
}
if (a[s[x][y] - 'A'] < 0)
{
for (int i = n - 1; i >= 0; -- i)
{
if (b[i] == 0)
{
if (x != 3)
{
a[s[x][y] - 'A'] = i;
b[i] = 1;
dfs (x + 1, y, t);
a[s[x][y] - 'A'] = -1;
b[i] = 0;
}
else
{
int sum = a[s[1][y] - 'A'] + a[s[2][y] - 'A'] + t;
if (sum % n != i) continue;
b[i] = 1;
a[s[x][y] - 'A'] = i;
dfs (1, y - 1, sum / n);
b[i] = 0;
a[s[x][y] - 'A'] = -1;
}
}
}
return ;
}
if (x != 3)
{
dfs (x + 1, y, t);
}
else
{
int sum = a[s[1][y] - 'A'] + a[s[2][y] - 'A'] + t;
if (sum % n != a[s[3][y] - 'A']) return ;
dfs(1, y - 1, sum / n);
}
}
int main ()
{
scanf ("%d", &n);
for (int i = 1; i <= 3; ++ i) scanf ("%s", s[i]);
memset (a, -1, sizeof (a));
dfs (1, n - 1, 0);
return 0;
}

[深搜]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. Vue Learning Paths

    Vue Learning Paths Vue Expert refs https://vueschool.io/articles/vuejs-tutorials/exciting-new-featur ...

  2. HTML5 in depth

    HTML5 in depth Content Models Web Storage web storage 存储用户信息, 替代 cookies LocalStorage SessionStorage ...

  3. Inspect Network Activity In Chrome DevTools

    Inspect Network Activity In Chrome DevTools https://developers.google.com/web/tools/chrome-devtools/ ...

  4. SpringBoot进阶教程(七十一)详解Prometheus+Grafana

    随着容器技术的迅速发展,Kubernetes已然成为大家追捧的容器集群管理系统.Prometheus作为生态圈Cloud Native Computing Foundation(简称:CNCF)中的重 ...

  5. Python算法_盛最多水的容器(04)

    给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) .在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0).找出其中的两条线, ...

  6. 【python】递归听了N次也没印象,读完这篇你就懂了

    听到递归总觉得挺高大上的,为什么呢?因为对其陌生,那么今天就来一文记住递归到底是个啥. 不过先别急,一起来看一个问题:求10的阶乘(10!). 求x的阶乘,其实就是从1开始依次乘到x.那么10的阶乘就 ...

  7. 详细探秘Linux 和 Window 双系统访问Windows 磁盘需要输入密码问题解决过程分析

    将要讲很多的内容真正产生作用的配置就只有下面这一句而已.如果你只是想要解决问题看这一句就行了,后面都没有必要在看下去了. 将allow-active标签中的auth_admin_keep 改为 yes ...

  8. 微信小程序:快速生成less文件类嵌套的结构

    全部选中标签结构,按住ctrl+shift+p,选中插件Generate CSS tree(提前安装CSS Tree),先删除undefined,将img替换成image,删除标签名view. 完整的 ...

  9. 读懂RESTful风格

    RESTful就是资源定位和资源操作的风格.不是标准也不是协议. REST即Representational State Transfer的缩写,可译为"表现层状态转化".REST ...

  10. 死磕Spring之IoC篇 - 开启 Bean 的加载

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...