洛谷 p1092 虫食算
题目链接: 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 虫食算的更多相关文章
- 洛谷P1092 虫食算
P1092 虫食算 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: http://paste.ubuntu.com/2544 ...
- 洛谷 P1092 虫食算 Label:dfs
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- [NOIP2004] 提高组 洛谷P1092 虫食算
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- 洛谷—— P1092 虫食算
https://www.luogu.org/problem/show?pid=1092 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简 ...
- 洛谷P1092虫食算——深搜
题目:https://www.luogu.org/problemnew/show/P1092 剪枝1:从右往左.从上往下按字母出现顺序搜索: 剪枝2:同一列前两个数字确定,可直接算出第三个数字并判断: ...
- 洛谷P1092 虫食算(算竞进阶习题)
模拟+dfs 这个题就三行,搜索的话我们从右向左,从上到下.. 如果是在1,2行我们就直接枚举0-n所有数,但是到了第三行,最直接的就是填上这一列上前两行的数的和modN,在此基础上判断该填的数有没有 ...
- 【题解】 P1092虫食算
[题解]P1092 虫食算 老题了,很经典. 用到了一些搜索套路. 可行性剪枝,劣者靠后,随机化,\(etc......\) 搜索设参也很有技巧,设一个\(adjustment\)参数可以很方便地在两 ...
- Luogu P1092 虫食算(枚举+剪枝)
P1092 虫食算 题面 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 + 8468#6633 4 ...
- P1092 虫食算 题解(搜索)
题目链接 P1092 虫食算 解题思路 好题啊!这个搜索好难写...... 大概是要考虑进位和考虑使用过某个数字这两个东西,但就很容易出错...... 首先这个从后往前搜比较好想,按照从后往前出现的顺 ...
随机推荐
- face recognition[翻译][深度学习理解人脸]
本文译自<Deep learning for understanding faces: Machines may be just as good, or better, than humans& ...
- java单例模式总结
目录 一. 饿汉模式(静态初始化) 二.双重检查锁(dcl) 三. 延迟占位类 四.枚举实现 最后 常见安全的单例实现代码和自己的一点理解. 一. 饿汉模式(静态初始化) class Singleto ...
- 【Java并发.3】对象的共享
本章将介绍如何共享和发布对象,从而使他们能够安全地由多个线程同时访问.这两章合在一起就形成了构建线程安全类以及通过 java.util.concurrent 类库来构建开发并发应用程序的重要基础. 3 ...
- 腾讯发布新版前端组件框架 Omi,全面拥抱 Web Components
Omi - 合一 下一代 Web 框架,去万物糟粕,合精华为一 → https://github.com/Tencent/omi 特性 4KB 的代码尺寸,比小更小 顺势而为,顺从浏览器的发展和 AP ...
- 朱晔和你聊Spring系列S1E4:灵活但不算好用的Spring MVC
阅读PDF版本 本文会以一些例子来展现Spring MVC的常见功能和一些扩展点,然后我们来讨论一下Spring MVC好用不好用. 使用SpringBoot快速开始 基于之前的parent模块,我们 ...
- POST BOY : Restful API 调试工具
在使用asp.net webapi开发中,一般情况下会使用一些工具来模拟请求. 其中有一款chrome浏览器插件POST MAN比较不错. 但是由于国内google服务使用不稳定,所以我自己写了一个简 ...
- 【RSYSLOG】Log4x To Rsyslog Config
Log4x To Rsyslog Config Log4net配置 <!--RemoteSyslogAppender--> <appender name="remoteSy ...
- 安装pandas时出现环境错误
在安装pandas时出现Could not install packages due to an EnvironmentErrorConsider using the `--user` option ...
- python中换行,'\r','\n'及'、'\r\n'
'\r'的本意是回到行首,'\n'的本意是换行. 所以回车相当于做的是'\r\n'或者'\n\r'.'\r'就是换行并回行首, '\n'就是换行并回行首,用'\r\n'表示换行并回行首. window ...
- Lombok 安装、入门以及使用
lombok 的官方网址:http://projectlombok.org/ lombok 安装 使用 lombok 是需要安装的,如果不安装,IDE 则无法解析 lombok 注解.先在官网下 ...