题目链接: https://www.luogu.org/problemnew/show/P1092

这个题折腾了我好久 这其实本质上是一道凑算式的题目 ,让一个二维数组存算式,一个一位数组存字母分别代表哪个数字。需要注意的是数位还有位置的标号的问题 究竟是0-n还是1-n还是0-(n-1),这是需要仔细考虑的问题。

直接上代码吧

#include<bits/stdc++.h>

using namespace std;

char ss[][];
int n,flag[],s[][],vis[]; void dfs(int x,int y,int t)
{
if(x==)
{
if(t==)
{
for(int i=;i<n;i++)
cout<<flag[i]<<" ";
cout<<flag[n];
exit();
}
return;
}
for(int i=x-;i>=;i--) //剪枝,一旦不适合就返回
{
int a=flag[s[][i]];
int b=flag[s[][i]];
int c=flag[s[][i]];
if(a==-||b==-||c==-) //还没有赋值的先不管他
continue;
if((a+b)%n!=c&&(a+b+)%n!=c)
return;
}
if(flag[s[y][x]]==-) //如果这一位的字母还没有赋值
{
for(int i=n-;i>=;i--) //要注意 取值是0到n-1
if(vis[i]==)
{
if(y!=) //最后一行和其他的有不同 要分开讨论
{
flag[s[y][x]]=i;vis[i]=;
dfs(x,y+,t);
flag[s[y][x]]=-;vis[i]=;
} else
{
int w=flag[s[][x]]+flag[s[][x]]+t;
if(w%n!=i)
continue;
flag[s[][x]]=i;vis[i]=;
dfs(x-,,w/n);
flag[s[][x]]=-; vis[i]=;
}
} }
else //如果已经赋值
{
if(y!=)
dfs(x,y+,t);
else
{
int w=flag[s[][x]]+flag[s[][x]]+t;
if (w%n!=flag[s[][x]]) //剪枝
return;
dfs(x-,,w/n);
}
} } int main()
{ cin>>n;
int i,j;
for(i=;i<;i++)
{
cin>>ss[i];
}
for(i=;i<=;i++)
for(j=;j<=n;j++)
{
s[i][j]=ss[i-][j-]-'A'+; //为了方便使用 我直接让角标从1开始
}
memset(flag,-,sizeof(flag));
dfs(n,,); }

洛谷 p1092 虫食算的更多相关文章

  1. 洛谷P1092 虫食算

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

  2. 洛谷 P1092 虫食算 Label:dfs

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

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

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

  4. 洛谷—— P1092 虫食算

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

  5. 洛谷P1092虫食算——深搜

    题目:https://www.luogu.org/problemnew/show/P1092 剪枝1:从右往左.从上往下按字母出现顺序搜索: 剪枝2:同一列前两个数字确定,可直接算出第三个数字并判断: ...

  6. 洛谷P1092 虫食算(算竞进阶习题)

    模拟+dfs 这个题就三行,搜索的话我们从右向左,从上到下.. 如果是在1,2行我们就直接枚举0-n所有数,但是到了第三行,最直接的就是填上这一列上前两行的数的和modN,在此基础上判断该填的数有没有 ...

  7. 【题解】 P1092虫食算

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

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

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

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

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

随机推荐

  1. robotframework中的try exception。断言失败后,后面语句能继续执行

    1.在robot中,断言有时会失败,但不想影响后面语句的执行,这时候要用到 Run Keyword And Continue On Failure

  2. appium遇到click事件,提示"w3cStatus":400

    1.小米手机被开发借用后归还,使用该手机再进行自动化,发现appium遇到click事件,返回400 2.当时未想到是要在手机侧进行开发者选项-调试权限的设置 3.一直以为是appium的问题,app ...

  3. PIL、Pillow安装使用方法

    PIL(Python Imaging Library)是Python常用的图像处理库,而Pillow是PIL的一个友好Fork,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存.图像显 ...

  4. Spring MVC 5 + Thymeleaf 基于Java配置和注解配置

    Spring MVC 5 + Thymeleaf 注解配置 Spring的配置方式一般为两种:XML配置和注解配置 Spring从3.0开始以后,推荐使用注解配置,这两种配置的优缺点说的人很多,我就不 ...

  5. Spring Cloud 入门教程(六): 用声明式REST客户端Feign调用远端HTTP服务

    首先简单解释一下什么是声明式实现? 要做一件事, 需要知道三个要素,where, what, how.即在哪里( where)用什么办法(how)做什么(what).什么时候做(when)我们纳入ho ...

  6. MFC 坦克定位

    最近学习MFC,写了个用键盘上下左右移动的坦克界面,效果图: 先用VC++新建一个最简单的MFC项目,基于Dialog的 1. 添加坦克图片资源:略 2. 添加3个变量:x, y, m_bitmap ...

  7. [C#] LINQ之GroupBy

    声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢! 本文作者文采欠佳,文字表达等方面不是很好,但实际的代码例子是非常实用的,请作参考. 一.先准备要使用的类: 1.Person类: cl ...

  8. 【NLP】Attention Model(注意力模型)学习总结

    最近一直在研究深度语义匹配算法,搭建了个模型,跑起来效果并不是很理想,在分析原因的过程中,发现注意力模型在解决这个问题上还是很有帮助的,所以花了两天研究了一下. 此文大部分参考深度学习中的注意力机制( ...

  9. Jmeter(三十六)_运行过程中改变负载

    顾名思义,jmeter在做性能测试时,可以在不停止脚本的情况下修改负载压力,达到期望的测试效果.我们将通过Constant Throughput Timer(吞吐量计时器)和Beanshell服务器来 ...

  10. python 链接 redis 失败 由于目标计算机积极拒绝,无法连接

    whereis redis-cli ps -ef |grep redis 1.启动redis redis-server & 2.查看redis 进程 ps -ef |grep redis 3. ...