CDOJ 1085 基爷与加法等式 DFS

CDOJ 1147 秋实大哥带我飞 最短路径条数 dijkstra就可搞 啊,就是说给你一个图,让你求从1到n的最短路径条数,模1e9+7 图的边权可能为0或者正数,边和点都可以重复走 最短路径条数为无穷则输出-1 啊,那个边权全为正的情况好说,边和点也不可能重复走 就是如果边权为0的话,它可以沿着这个边无限次数的来回走,然后就是无穷了 嗯,看题解什么队列搞阿,网上搜了都是DFS,,后来感觉dijkstra就可以搞阿,,看到网上果然有一个这么搞的,代码太丑就没 阅读详情

就是给一个由字母组成的加法等式,问这个等式有多少种情况,相同字母代表相同数字,不同字母代表不同数字,不存在前导0.

呃,就是DFS搜索,但是刚开始我的姿势不对,就T了。

刚开始我是就枚举前面的所有情况,然后看得到的和能不能组成最后的和。然后,这个搜索姿势很智障地T了。。。

然后就去度娘了,,,发现要按每一位进行搜索,就是搜索所有的个位数,然后查看和的个位数是否能满足,再依次搜索十位,百位。。

这样,如果不合法,就可以很早地发现,算是一个很大的剪枝了。。

最后因为最后一个数字的长度太长和太短而错了几发,,就这样了。。


代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
char formu[12][12];
int idx[27];
int n, llen, maxlen;
bool nozero[27];
bool num[10];
int DFS(int x, int y, int carry)
{
	int ans = 0;
	if (x == n - 1)
	{
		int sum = 0;
		bool new_num = 0;
		for (int i = 0; i < n - 1; ++i)
			sum += idx[formu[i][y]];
		sum += carry;
		int last = sum % 10;
		if (idx[formu[x][y]] == -1)
		{
			if (num[last]||(last==0&&nozero[formu[x][y]]))
			{
				return 0;
			}
			new_num = 1;
			idx[formu[x][y]] = last;
			num[last] = 1;
		}
		else if (last != idx[formu[x][y]])
		{
			return 0;
		}
		if (y == llen - 1 && sum / 10 == 0)
		{
			ans = 1;
			if (new_num)
			{
				idx[formu[x][y]] = -1;
				num[last] = 0;
			}
		}
		else
		{
			ans = DFS(0, y + 1, sum / 10);
			if (new_num)
			{
				idx[formu[x][y]] = -1;
				num[last] = 0;
			}
		}
	}
	else if (idx[formu[x][y]] == -1)
	{
		int i = 0;
		if (nozero[formu[x][y]])
			i = 1;
		for (; i <= 9; ++i)
		{
			if (num[i])
				continue;
			idx[formu[x][y]] = i;
			num[i] = 1;
			ans += DFS(x + 1, y, carry);
			num[i] = 0;
		}
		idx[formu[x][y]] = -1;
	}
	else
		ans = DFS(x + 1, y, carry);
	return ans;
}
int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	while (scanf("%d", &n) != EOF)
	{
		memset(num, 0, sizeof(bool) * 10);
		memset(formu, 0, sizeof(char) * 12 * 12);
		memset(idx, -1, sizeof(int) * 27);
		memset(nozero, 0, sizeof(bool) * 27);
		idx[0] = 0, maxlen = 0;
		int ans = 0;
		for (int i = 0; i < n; ++i)
		{
			scanf("%s", formu[i]);
			int len = strlen(formu[i]);
			if (len > maxlen)
				maxlen = len;
			for (int j = 0; j < (len + 1) / 2; ++j)
			{
				char tmp = formu[i][j] - 'A' + 1;
				formu[i][j] = formu[i][len - 1 - j] - 'A' + 1;
				formu[i][len - 1 - j] = tmp;
			}
			nozero[formu[i][len - 1]] = 1;
		}
		llen = strlen(formu[n - 1]);
		if (maxlen==llen)
			ans = DFS(0, 0, 0);
		printf("%d\n", ans);
	}
	//system("pause");
	//while (1);
	return 0;
}

告别Godot默认编辑器:手把手教你用VSCode配置C#开发环境(附中文注释避坑指南) 本文详细介绍了如何将VSCode配置为Godot引擎的C#开发环境,提升游戏开发效率。从环境准备、扩展配置到解决中文编码问题,提供完整的避坑指南和高级调试技巧,帮助开发者充分利用VSCode的智能补全和调试功能,打造高效工作流。 阅读详情

相关推荐

JAVA进阶面试题:如何设计一个高并发系统?

如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,高峰期并发量上万,甚至是十万。那么人家一定会仔细盘问你的系统架构,你们系统啥架构?怎么部署的?部署了多少台机器

uuop155的博客 1019

1-9九个数字不重复组成一个三位数加法算式,求出所有组合

此题咱没想出很巧妙的解法,直接根据编程来吧 using System; using System.Collections.Generic; using System.Text; namespace RemainerMaths { class Program { static void Main(string[]

3万+

告别偏移地址!用C# S7PLUS驱动读写西门子S7-1500符号地址(TIA Portal V17+环境配置)

本文详细介绍了如何在TIA Portal V17+环境中使用C# S7PLUS驱动读写西门子S7-1500 PLC的符号地址,告别传统的偏移地址方式。通过配置OpenSSL、集成S7PLUS驱动库,以及实战案例展示符号地址的读写方法,显著提升代码可读性和维护效率。文章还涵盖了环境准备、高级配置及常见问题解决方案,助力工业自动化开发者实现更高效的PLC通讯。

weixin_28720767的博客 315

1996:加法等式

题目描述 设a、b、c 均是0 到9 之间的数字,abc、bcc 是两个三位数,且有:abc+bcc=532。求 满足条件的所有a、b、c 的值。 输入格式  无。 输出  每行输出3个数,分别表示abc的值,用一个空格隔开。 样例输入 无 样例输出 无 #include int main() { int a,b,c,sum1

Kay 813

【Claude Code 源码解析教程】第25章:测试与调试

Claude Code 作为复杂的 AI 编程助手,测试与调试是保证质量的关键环节。项目建立了完善的测试体系,包括单元测试、集成测试、端到端测试等多个层次,同时提供了丰富的调试工具和技巧。

rengang66的博客 210

金融行业大数据可视化:实时监控与风险预警系统构建

随着金融业务数字化转型,日均产生的交易数据、市场数据、客户行为数据呈指数级增长(单家银行日交易数据量可达TB级)。数据实时性不足(分钟级延迟难以应对高频交易风险)风险特征挖掘浅层(仅基于规则引擎,漏报率高达30%+)可视化分析能力薄弱(静态报表无法支持动态决策)本文聚焦构建具备毫秒级数据响应智能风险建模交互式可视化决策能力的新一代系统,覆盖数据采集、实时处理、多维可视化、智能预警四大核心模块,适用于银行、证券、保险等金融细分领域。章节核心内容技术亮点核心概念可视化系统架构/数据流模型。

AI天才研究院 1522

CDOJ1085 基爷与加法等式 爆搜DFS

题目链接:http://acm.uestc.edu.cn/#/problem/show/1085题意:题解:因为进位,从低位搜 代码:http://www.cnblogs.com/qscqesze/p/4489781.html#include <bits/stdc++.h> using namespace std; typedef long long ll; #define MS(a) memset

yxg_123的博客 331

【YOLOv10改进[Backbone]】使用ADNet改进YOLOv10在噪声干扰下的目标检测效果(图像去噪)+ 含全部代码和详细修改方式 + 手撕结构图 + 全网首发

使用ADNet改进YOLOv10在噪声干扰下的目标检测效果(图像去噪)+ 含全部代码和详细修改方式 + 手撕结构图 + 全网首发 + 遥遥领先

静谧、淡雅 2858

zoj1204-addtive eqations(加法算式)

ZOJ1204 addtive equations 加法算式 题解 TAG:DFS

Mr. WA's Blog 2021

使用 Visual Studio Code 搭建 SAP UI5 本地开发环境

工欲善其事,必先利其器。时至今日,SAP 提供了非常多的 SAP UI5 开发工具,既包含本地搭建的,也包含浏览器里远端使用的工具,比如 WebIDE 和 Business Application Studio. 我们访问下面这个链接,就能找到所有这些工具的安装或者配置步骤: https://tools.hana.ondemand.com/#sapui5 如果想选择本地开发,SAP 推荐的工具是 Visual Studio Code,也就是本文要介绍的内容。 也可以下载 WebIDE 的本地安装包,将其安

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1万+

Python爬虫案例——解密抓取西红柿小说《我不是戏神》全章节!!!

本文介绍了抓取番茄小说网站《我不是戏神》全本内容的完整流程。首先分析网站反爬机制,发现采用自定义混淆字体加密文本内容。通过下载字体文件并解析字符映射关系,组建本地字体映射表。随后编写Python爬虫程序,实现自动获取章节链接、请求加密内容、解密替换字体、保存为本地txt文件等功能。代码包含UA伪装、请求头设置、进度条显示等细节处理,最终实现小说内容的完整抓取与解密存储。

@优快云盲敲代码的阿豪的博客 660

CDOJ 215 吴队长征婚 DFS+剪枝

吴队长征婚这件事因为请客而没有传出去(虽然他忘了请一个队吃饭),于是吴队长高兴地玩起了木棒。吴队长拿了一些长度相同的木(guang)棒(gun),随机的把它们截成了NN段,每一段最长50。现在他想把这些木棒还原成原来的状态,但是他忘记了原来的木棒有多少根,也忘记了每一根有多长。请帮助他设计一个程序,帮他计算之前木棒可能的最小长度。输入数据保证每一段木棒长度都大于0。 输入有多组数据,每组数据分为

一蓑烟雨任平生 6858

基于STM32F103设计的智能门锁(支持多种开锁解锁方式)

这个智能锁模型是基于STM32平台开发的,支持多种开锁方式。其中,一种是使用RC522射频卡读卡器读取IC卡卡号和内部数据,并验证身份后开锁;另一种是通过连接蓝牙地址来确认业主身份,实现了蓝牙自动开锁功能;最后一种是通过ESP8266连接腾讯云物联网平台,并且用户可以通过微信小程序“腾讯连连”进行远程开锁和关锁。这样,用户就可以选择最方便的方式来进行开锁操作了。

3万+

CDOJ 1168 凤神与狗(数论_概率)

D - 凤神与狗 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 凤神隐居山林,与猫狗为伴。起初,他拥有c只猫和d只狗。每天下午他随机从中选择一只出去游玩并且晚上归来。如果他带的是狗,则第二天早上狗的数量增加w只,否则,猫的数量增加w只。由于凤神特别钟爱狗,某些重要的日子

一蓑烟雨任平生 1516

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

CDOJ 1059 秋实大哥与小朋友(离散化)

本文部分代码及思路来源于:http://www.cnblogs.com/Xiper/p/4470202.html 秋实大哥与小朋友 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 秋实大哥以周济天下,锄强扶弱为己任,他常对天长叹:安得广厦千万间,大庇天下寒士

一蓑烟雨任平生 1076

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

CDOJ 1088 王之迷宫 BFS

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 王被困在了一个3维的迷宫中,他很想逃离这个迷宫回去当学霸,你能帮助他么? 由于王很仁慈,他悄悄地告诉你,本题读入迷宫的每一行时,要用scanf("%s"...) ...... Input 多组测试数据,对于每组测试数据

一蓑烟雨任平生 970

CDOJ 1074 秋实大哥搞算数(栈_表达式求值)

秋实大哥搞算数 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 秋实大哥大学物理挂科了,于是在下学期的前两周的某一天要悲剧的补考。为了不给学校的挖掘机大楼做贡献,秋实大哥决定在假期里努力复习。当然,良好的计算能力也是非常必要的,毕竟是涉及计算自己做多少分的题能够通过考试的

一蓑烟雨任平生 853

CDOJ_1063 秋实大哥与妹纸(堆结构)

秋实大哥与妹纸 致中和,天地位焉,万物育焉。秋实大哥是一个追求中庸的人。 虽然秋实大哥的仰慕者众多,但秋实大哥不喜欢极端的妹纸。所以他想从所有仰慕自己的妹纸中挑选出一个符合中庸之道的。 每一个妹纸对秋实大哥的仰慕程度可以用一个整数ai来表示,秋实大哥想要找出这些数的中位数。 计算有限个数的数据的中位数的方法是 把所有的同类数据按照大小的顺序

一蓑烟雨任平生 811

2016 UESTC Training for Data Structures O - 卿学姐种美丽的花 CDOJ 1344 线段树/树状数组

O - 卿学姐种美丽的花 给一个区间,等差数列更新,单点查询 我们可以开一个线段树记录这个点被更新的次数,然后因为是区间更新,所以我们需要一个lazy,lazy表示这个区间的被更新的数列的首项是多少,还有一个cnt,表示公差,因为两个数列加和到一起时,公差也会相加,所以就是这样了,然后lazy下放的时候,也是计算下两个子区间的首端点的位置是多少,相当于把这个数列分为两个子数列 然后我们就

一蓑烟雨任平生 794

CDOJ 1092 韩爷的梦 字符串哈希

就是字符串哈希求个数,因为内存限制很小,所以只能把所有的哈希值存下来,然后排序,去重,就可以 不知为什么,我的p选的是1e9+7,mod是1e9+9,就会WA,然后两个换一下。p是1e9+9,mod是1e9+7,就过了,2333 原来字符串哈希也不难。。。。去年的时候,,,还是十分懵逼的小白。。。。什么都看不懂。。。 代码: #include #include #include #i

一蓑烟雨任平生 790

2016 UESTC Training for Data Structures B - 卿学姐与基本法 CDOJ 1325 线段树+离散化

B题:卿学姐与基本法 题意:给一段区间,长度为1e8,Q次操作(Q), 操作有两种,一种是将某个区间进行染色,另一种是查询某个区间未被染色的长度   离散化+线段树求区间染色 呃,离散化很简单咯,我的做法就是sort+unique+lower_bound搞定,聊天中柱爷突然说了一句,其实unique可以没有,想了想,真的诶,如果不要求编号必须连续的话,是可以没有unique的,但是习惯有

一蓑烟雨任平生 762

CDOJ 763 树上的鸟儿(水题/模拟题)

树上的鸟儿 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) 作为电子科大的一员,大家都知道,我们校园有很多高大的银杏树,现在小明正在观察一棵树上的鸟儿,他发现了一些规律。 在这个树上,有一些雄鸟和雌鸟(小明很厉害,能分得出鸟儿的雄雌),假如来了一只雄鸟,它会

一蓑烟雨任平生 760

2016 UESTC Training for Data Structures E - 卿学姐与城堡的墙 CDOJ 1341 树状数组 逆序对 离散化

E题:卿学姐与城堡的墙 有N条直线,以y=kx+b的形式给出,问有多少种方式任取两个直线,使这两个直线的交点在x=u和x=v之间 对于两个直线a和b,怎么判断他们的交点在x=u和x=v之间呢 假如直线a在x=u时的纵坐标为yau,在x=v时的纵坐标为yav,直线b在x=u时的纵坐标为ybu,在x=v时的纵坐标为ybv。假设yau在ybu的下面,但是yav却在ybv的上面,那中间就是一定有交点

一蓑烟雨任平生 735

2016 UESTC Training for Data Structures Q - 昊昊爱运动 II CDOJ 1259 线段树+bitset

Q - 昊昊爱运动 II 题意,区间长度N,N为1e5,运动种数为M,M Q次操作,Q,每次可以把一个区间的运动都换成x,或者查询一个区间的运动种数   在放宽了时限和内存之后,bitset就直接搞过去了   之前因为卡的太紧,我就用两个long long模拟的bitset,另外线段树也没有存左右端点,是在更新和查询的过程中用形参来保存的   具体做法就是每个节点存一个bits

一蓑烟雨任平生 732

2016 UESTC Training for Data Structures L - 郭大侠与苦恼 CDOJ 1284 map+启发式合并

L - 郭大侠与苦恼 题目简单,就是给你一棵树,然后问异或值为0的简单路径有多少条 好难,好麻烦,想了好久才想明白 按dfs的顺序来map+启发式合并, 后来想找个题的大概框架和树形01背包相似,都是用dfs来实现的,只不过树形01背包dfs后的过程是背包的合并,这个是map的合并,还是启发式合并(就是把size小的合并到size大的上), 然后我们这里维护的是pre[u],就是从根

一蓑烟雨任平生 716

2016 UESTC Training for Data Structures A - 卿学姐与公主 CDOJ 1324 线段树

A题 题意:有一个数列,长度为10^5,初始全为0 要求支持两种操作:单点更新和区间查询最大值 操作次数10^5, 另:答案可能会爆int,所以用long long存   唔,线段树裸题,存的是最大值,所以更新时的push_up是: tr[id].mx=max(tr[lid].mx,tr[rid].mx); 然后就可以了,   坑点就是爆int,咦,对,还有就是更新的时候是加上

一蓑烟雨任平生 714
上一篇: 八数码 八境界
下一篇: CDOJ 1131 男神的礼物 石子合并
sky-edge
博客等级 码龄12年 20粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值