P1092 虫食算
题目传送:https://www.luogu.org/problem/show?pid=1092
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#define maxn 30
int n,flag[maxn];
][maxn];
bool use[maxn];
int id(char ch)//将字符串转换为数字
{
;
}
void dfs(int x,int y,int t)//x代表列,y代表行,t代表进位
{
) //从上到下,从右到左,x==0表示搜到了最后一列
{
)//最后一列不能有进位,如果进了以为则第三个字符串会比其他两个字符串长一位
{
;i<n;i++) //如果满足条件,就输出
printf("%d ",flag[i]);//输出
printf("%d\n",flag[n]);//输出
exit(); //相当于return 0;程序结束
}
return;//返回
}
;i>=;i--) //剪枝1
{
][i])];//w1表示第一行字符串代表的数字
][i])];//w2表示第二行字符串代表的数字
][i])];//w3表示第三行字符串代表的数字
||w2==-||w3==-) //如果这个位置上还没被赋值,就返回
continue;
)%n!=w3)
return; //如果无论进位与否,都不能整除对应的w3就说明字符串不匹配,直接return ;
}
) ////如果这个位置上还没被赋值,就进行赋值操作
{
;i>=;i--) //倒着枚举更快
if (!use[i]) //如果这个数没有用过
{
) //且不是最后一行
{
flag[id(s[y][x])]=i;//就将这个位置赋上值
use[i]=;//标记这个数用过
dfs(x,y+,t);//继续搜索下一行
flag[id(s[y][x])]=-;//还原
use[i]=;//还原
}
else //当y==3时
{
][x])]+flag[id(s[][x])]+t;//两个数加上它们的进位
if (w%n!=i)
continue;
use[i]=;flag[id(s[][x])]=i;//赋值,标记这个数用过
dfs(x-,,w/n);//搜索下一列,进位需要改变
use[i]=;flag[id(s[][x])]=-;//还原
}
}
}
else //如果这个位置上已经被赋值了
{
) //继续搜索
dfs(x,y+,t);
else
{
][x])]+flag[id(s[][x])]+t;
][x])]) //剪枝 2
return;
dfs(x-,,w/n);//搜索下一列,进位需要改变
}
}
}
int main()
{
scanf("%d",&n);//读入n,代表n进制等......
;i<=;i++)
scanf();//读入3行字符串
memset(flag,-,sizeof(flag));//将所有位置标记为未赋值
dfs(n,,);//从右往左,上往下搜索,所有从第n列,第1行开始
;//结束
}
P1092 虫食算的更多相关文章
- 洛谷P1092 虫食算
P1092 虫食算 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: http://paste.ubuntu.com/2544 ...
- 【题解】 P1092虫食算
[题解]P1092 虫食算 老题了,很经典. 用到了一些搜索套路. 可行性剪枝,劣者靠后,随机化,\(etc......\) 搜索设参也很有技巧,设一个\(adjustment\)参数可以很方便地在两 ...
- Luogu P1092 虫食算(枚举+剪枝)
P1092 虫食算 题面 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 + 8468#6633 4 ...
- P1092 虫食算 题解(搜索)
题目链接 P1092 虫食算 解题思路 好题啊!这个搜索好难写...... 大概是要考虑进位和考虑使用过某个数字这两个东西,但就很容易出错...... 首先这个从后往前搜比较好想,按照从后往前出现的顺 ...
- 洛谷 P1092 虫食算 Label:dfs
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- Luogu P1092 虫食算
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- [NOIP2004] 提高组 洛谷P1092 虫食算
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- 洛谷—— P1092 虫食算
https://www.luogu.org/problem/show?pid=1092 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简 ...
- 【搜索】$P1092$虫食算
题目链接 首先,我们只考虑加法的虫食算.这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0. 其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同 ...
- P1092 虫食算(洛谷)
今天做了一道题,我之前吹牛的时候曾经说:“这个题我觉得深搜剪枝一下就可以了.”. 我觉得我之前说的没错“这个题深搜剪枝亿下,再加点玄学就可以了!” 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子 ...
随机推荐
- 12.21-Android WebService(基于KSOAP2)
KSOAP2_连接WebService *****我是小知识点******** Ksoap2提供了对soap序列化更好的支持.Ksoap2是一个轻量级的J2ME平台的实现框架,提供了soap协议消息的 ...
- MySQL常用存储引擎
MySQL存储引擎主要有两大类: 1. 事务安全表:InnoDB.BDB. 2. 非事务安全表:MyISAM.MEMORY.MERGE.EXAMPLE.NDB Cluster.ARCHIVE.CSV. ...
- 学习一门新语言需要了解的基础-12 if和switch对比
本节内容 是否存在性能差异 使用场景 反汇编对比[付费阅读] 之前初步接触了汇编,然后利用汇编简单了解下函数调用的过程,包括怎么样保护堆栈帧现场和恢复现场.另外做了简单的函数调用参数复制,返回值的传递 ...
- ArrayList 源码(基于Java1.8)
ArrayList 源码 ArrayList 基于数组实现,也就是类对变量 Object[]系列操作,封装为常用的add,remove,indexOf, contains本质是通过 size 计数器对 ...
- How to change your password of your mysql account in WampServer
#1. use phpmyadmin to login mysql and click the account menu, and then click "Change the passwo ...
- 使用 LitJson 解析Json并读取数据
开发中经常要获取各种数据,而现今比较常见的数据便是Json数据格式,网上也有很多解析Json数据的方法,但是 作为小白的我,对于那些个高大上的方法理解不够,这不找了许久发了这些一个 LitJson 库 ...
- hive1.2.2部署
1.解压hvie.tar,进入conf目录下,cp hive-default.xml.template hive-site.xml; 2.将hive下的新版本jline的JAR包拷贝到hadoop下: ...
- Mysql修改已有数据的字符集
Mysql修改已有数据的字符集 问题 在生产环境中跑了很久,发现MysqlClient连接的字符集是默认的latin1,我们一直以为都是utf8,造成这样的误解,是因为在内网环境中,我们是源码编译的M ...
- BPF漫谈
源起 最近看到国内两篇文章[1][2]先后翻译了就职于Netflix的性能分析大牛Brendan Gregg于2017年7月31日写的<Golang bcc/BPF Function Traci ...
- SVN服务迁移备份操作步骤
SVN服务备份操作步骤 1.准备源服务器和目标服务器 源服务器:192.168.1.250 目标服务器:192.168.1.251 root/rootroot 2.对目标服务器(251)装SVN服务器 ...