题目传送: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 虫食算的更多相关文章

  1. 洛谷P1092 虫食算

    P1092 虫食算 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: http://paste.ubuntu.com/2544 ...

  2. 【题解】 P1092虫食算

    [题解]P1092 虫食算 老题了,很经典. 用到了一些搜索套路. 可行性剪枝,劣者靠后,随机化,\(etc......\) 搜索设参也很有技巧,设一个\(adjustment\)参数可以很方便地在两 ...

  3. Luogu P1092 虫食算(枚举+剪枝)

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

  4. P1092 虫食算 题解(搜索)

    题目链接 P1092 虫食算 解题思路 好题啊!这个搜索好难写...... 大概是要考虑进位和考虑使用过某个数字这两个东西,但就很容易出错...... 首先这个从后往前搜比较好想,按照从后往前出现的顺 ...

  5. 洛谷 P1092 虫食算 Label:dfs

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

  6. Luogu P1092 虫食算

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

  7. [NOIP2004] 提高组 洛谷P1092 虫食算

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

  8. 洛谷—— P1092 虫食算

    https://www.luogu.org/problem/show?pid=1092 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简 ...

  9. 【搜索】$P1092$虫食算

    题目链接 首先,我们只考虑加法的虫食算.这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0. 其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字母表示,不同 ...

  10. P1092 虫食算(洛谷)

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

随机推荐

  1. 压缩感知重构算法之压缩采样匹配追踪(CoSaMP)

    压缩采样匹配追踪(CompressiveSampling MP)是D. Needell继ROMP之后提出的又一个具有较大影响力的重构算法.CoSaMP也是对OMP的一种改进,每次迭代选择多个原子,除了 ...

  2. Java基础——字符串构建器

    StringBuilder类: 可以将许多小段的字符串构建一个字符串. StringBuilder builder = new StringBuilder(); //构造一个空的字符串构建器 buil ...

  3. Python Linear algebra

    Linear algebra 1.模块文档 NAME numpy.linalg DESCRIPTION Core Linear Algebra Tools ---------------------- ...

  4. P3003 [USACO10DEC]苹果交货Apple Delivery

    题目描述 Bessie has two crisp red apples to deliver to two of her friends in the herd. Of course, she tr ...

  5. Linux 基本命令-----常用操作分类

    Linux/Unix 命令格式: 命令名 [选项] [参数] 注:[]中的内容代表内容可以省略 例:$ ls $ ls -l #-l 是选项 开始符号: 文件名 或 文件夹名 .当前文件夹 ..上一级 ...

  6. windows系统扩展C盘的工具推荐(解决了C盘和压缩卷不相邻无法扩展C盘问题)

    1.下载分区工具 “分区助手3.0中文版” 下载地址:http://www.33lc.com/soft/14880.html 2.下载下来是一个压缩包,解压后运行安装程序. 3.安装完成后按以下步骤执 ...

  7. Ubuntu & Docker & Consul & Fabio & ASP.NET Core 2.0 微服务跨平台实践

    相关博文: Ubuntu 简单安装 Docker Mac OS.Ubuntu 安装及使用 Consul Consul 服务注册与服务发现 Fabio 安装和简单使用 阅读目录: Docker 运行 C ...

  8. NLP论文泛读之《教材在线评论的情感倾向性分析》

    NLP论文泛读之<教材在线评论的情感倾向性分析> 本文借助细粒度情感分类技术, 对从网络上抓取大量计算机专业本科教材的评价文本进行情感极性 分析, 从而辅助商家和出版社改进教材的质量.制定 ...

  9. 文本域、bootstrap-table显示以及MySQL三者间的换行符问题

    首先,今天在做项目的时候遇到的一个问题,如何实现文本输入换行以及在前台Bootstrap-table中显示也能够换行. 也许你马上就会想到说,用富文本编辑器,然而我们需要实现的只是文本输入以及换行功能 ...

  10. R学习笔记 第五篇:字符串操作

    文本数据存储在字符向量中,字符向量的每个元素都是字符串,而非单独的字符.在R中,可以使用双引号,或单引号表示字符,函数nchar用于获得字符串中的字符数量: > s='read' > nc ...