ACDREAM 05D 哗啦啦族的加法计算

Problem Description

小彭玉今天开始学习加法啦!

唐老师写了个加法等式,小彭玉扑通扑通就凑出来了一种合法解

唐老师又写了个加法等式,然后想问你,这个加法等式究竟有多少种可行解呢?

Input

输入包含多组数据。

每组数据第一行一个整数n,表示有n个字符串 3 ≤ n ≤ 10

接下来n行,每行有1个最多只含10个大写字母的字符串,前 n - 1 行的字符串表示加数,第 n 行的字符串表示和

每个样例最多只有26个互不相同的大写字母,每个字母表示 0 - 9 中的一个数,相同字母表示相同的数,不同字母表示不同的数输入包含多组数据。
Output

对于每组数据输出一个整数,表示不同的可行解的数量。

对于两个可行解,只要有一个字母表示不同的数字,我们就认为这两个可行解不同
Sample Input

4
TAI
SHEN
LA
ACER

Sample Output

76

题目大意:由26个字母组成的竖式加法,一个字母对应一个数字(0~9,不会同时出现10个不同的字母),问有几种映射是满足这个竖式的。

解题思路:注意竖式上的数不能有前导零。

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <map>
using namespace std;
typedef long long ll;
int n;
char s[15][15];
int vis[10];
int len[15], Max, ans;
int mp[30];
bool check() {for(int i = 1; i <= n; i++) {int len = strlen(s[i]);if(mp[s[i][len-1] - 'A'] == 0)return false;}return true;
}
void dfs(int x, int y, int sum) {if(x == n) {if(y == Max - 1) {if(sum / 10 == 0) {if(mp[s[x][y] - 'A'] == -1 && check() && !vis[sum % 10]) {ans++;}else if(mp[s[x][y] - 'A'] == sum % 10 && check()) {ans++;}}}else if(mp[s[x][y] - 'A'] != -1) {if(sum % 10 == mp[s[x][y] - 'A'])dfs(1, y + 1, sum / 10);}else {if(!vis[sum % 10]) {mp[s[x][y] - 'A'] = sum % 10;vis[sum % 10] = true;dfs(1, y + 1, sum / 10);mp[s[x][y] - 'A'] = -1;vis[sum % 10] = false;}}return ;}else {if(s[x][y] == 0) {dfs(x + 1, y, sum);}else if(mp[s[x][y] - 'A'] != -1) {dfs(x + 1, y, sum + mp[s[x][y] - 'A']);}else {for(int i = 0; i < 10; i++) {if(!vis[i]) {mp[s[x][y] - 'A'] = i;vis[i] = true;dfs(x + 1, y, sum + i);mp[s[x][y] - 'A'] = -1;vis[i] = false;}}}}
}int main() {while (scanf("%d\n", &n) != EOF) {memset(vis, 0, sizeof(vis));memset(mp, -1, sizeof(mp));memset(s, 0, sizeof(s));Max = 0;for (int i = 1; i <= n; i++) {scanf("%s", s[i]);len[i] = strlen(s[i]);Max = max(Max, len[i]);reverse(s[i], s[i] + len[i]);} ans = 0;dfs(1, 0, 0);printf("%d\n", ans);}return 0;
}

ACDREAM 05D 哗啦啦族的加法计算(DFS专场)相关推荐

  1. 汇编语言 用加法计算123*236,结果存在ax中

    题目要求 用加法计算123*236,结果存在ax中 分析 123个256相加(循环123次) 123的十六进制是7bh 236的十六进制是0ech 运行结果 代码 ;用加法计算123*236,结果存在 ...

  2. Linux加法简单程序,Android应用程序的开发目录——简单的加法计算示例

    突然说写Android 的笔记让我很迷茫,不知从哪里开始写,就按老师上课的过程进行吧! Android的程序目录 代码建立在src中这个不用解释了,在gen所在的文件夹里有个叫R.java的类,这个类 ...

  3. 单精度浮点数(float)加法计算出错

    场景: 一个float型的变量赋值1170601,加上19000000,结果出现错误. 原因: float占用4个字节(32位)存储空间,包括符号位1位,阶码位8位,尾数23位.浮点数精度与它的尾数有 ...

  4. XYNUOJ : 100以内加法计算

                                                  1757: 100以内加法计算 时间限制: 1 Sec  内存限制: 128 MB 题目描述 胡八一今年3岁 ...

  5. jQuery简单加法计算

    例子: <!DOCTYPE html> <html> <head><meta http-equiv="Content-Type" cont ...

  6. 分苹果 A,B两个人把苹果分为两堆,A希望按照它的计算规则等分苹果,他的计算规则是按照二进制加法计算,并且不计算走位,12+5=9(1100+0101=9)

    前言 <华为机试真题>专栏为华为OD机试真题,源码包含多种语言. 如果找不到想要的考题 ,或者需要最新考题的答案,请进行留言机试题目,[注:留言考题请注明机试的时间] 题目描述 [分苹果] ...

  7. acdream 1725 哗啦啦的小彭玉染色问题 离散化并查集

    哗啦啦的小彭玉染色问题 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acdream.info/problem?pid=1725 Descri ...

  8. 不使用加法计算两个数的和

    一.前置知识 为了能够快速的理解最后的算法,这里先准备一些前置知识.这些所谓的前置知识可以理解为"点",最后只要把这些"点"串联为"线",就 ...

  9. Web版简易加法计算

    ##HTTP HTTP是一个客户端和服务器端请求和应答的标准(TCP).客户端是终端用户,服务器端是网站.通过使用Web浏览器.网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80 ...

最新文章

  1. Maven向本地仓库导入官方仓库没有的jar包
  2. 如何找回误删并清除了回收站的文档
  3. 《CCNA安全640-554认证考试指南》——6.4节复习所有考试要点
  4. Objective-C中.h、.m、.mm的区别
  5. Boost:GPU上的2D图像中绘制最终的随机“walk”,并使用OpenCV进行显示
  6. 【原创】centos常见问题集锦
  7. java在线聊天项目ppt_基于JavaEE的在线聊天聊天.ppt
  8. 这家保险公司的第三朵云为什么选择Power?
  9. 第三百四十五天 how can I 坚持
  10. Julia : 类型别名
  11. springboot实现任务调度的第三种方式------使用第三方quartz插件调度(springBoot+quartz+cronTrigger进行任务调度)
  12. java jdom 创建xml_java中使用jdom生成xml
  13. android微信解析失败,微信开放平台sdk解析失败
  14. ISP——Gamma Correction
  15. 蓝代斯克和玖道在华设立合资企业
  16. 系统分析软件测试,系统软件测试:风险分析
  17. 在研究所月入两万,是一种什么体验?
  18. 1.Cherry Pick与Create Patch的区别
  19. [读史思考] 田单火牛阵是真实的吗?
  20. pipelines php,Azure DevOps 2020(五)使用 Pipelines 自动化发布 NUGET 包

热门文章

  1. 5.4 成员变量的隐藏和方法重写
  2. vue 生命周期 返回不触发_Vue生命周期activated之返回上一页不重新请求数据操作...
  3. vmware 安装openstack,安装mysql,keyston glance,nova
  4. 算法初体验之欧几里得算法
  5. 论文精读2: Ground-to-Aerial Image Geo-LocalizationWith a Hard Exemplar Reweighting Triplet Loss
  6. iOS中使用storyboard进行布局
  7. default.asp html,ASP.NET Core 设置默认起始页(如default.html)
  8. 微信名片加好友服务器繁忙,还傻乎乎的微信加好友?这些细节你要注意!
  9. 基于python的电商网站建设_基于Django的电子商务网站开发
  10. 品西游之馒头引起的血案(上)