【NOIP 2004】 虫食算
【题目链接】
https://www.luogu.org/problemnew/show/P1092
【算法】
搜索 + 剪枝
直接搜索显然会超时,考虑剪枝
1 : 优化搜索顺序
2 : 假设我们已经确定了一组(Ai,Bi,Ci),那么,如果(Ai + Bi) mod n 和(Ai + Bi + 1) mod n都不等于Ci,可以剪枝
【代码】
#include<bits/stdc++.h>
using namespace std; int i,n,len;
int a[],ord[];
char A[],B[],C[];
bool used[],vis[];
bool solved; inline bool ok()
{
int i;
for (i = n; i >= ; i--)
{
if (a[A[i]-'A'+] == -) continue;
if (a[B[i]-'A'+] == -) continue;
if (a[C[i]-'A'+] == -) continue;
if ((a[A[i]-'A'+] + a[B[i]-'A'+]) % n == a[C[i]-'A'+]) continue;
if ((a[A[i]-'A'+] + a[B[i]-'A'+] + ) % n == a[C[i]-'A'+]) continue;
return false;
}
return true;
}
inline void print()
{
int i;
for (i = ; i <= n; i++) printf("%d ",a[i]);
printf("\n");
}
inline bool check()
{
int t,b = ;
for (i = n; i >= ; i--)
{
t = (a[A[i]-'A'+] + a[B[i]-'A'+] + b) % n;
if (a[A[i]-'A'+] + a[B[i]-'A'+] + b >= n) b = ;
else b = ;
if (a[C[i]-'A'+] == t) continue;
else return false;
}
if (b) return false;
else return true;
}
inline void dfs(int dep)
{
int i;
if (dep > n)
{
if (check())
{
solved = true;
print();
}
return;
}
if (!ok()) return;
for (i = n - ; i >= ; i--)
{
if (!used[i])
{
a[ord[dep]] = i;
used[i] = true;
dfs(dep+);
if (solved) return;
used[i] = false;
a[ord[dep]] = -;
}
}
} int main()
{ memset(a,,sizeof(a));
scanf("%d%s%s%s",&n,A+,B+,C+);
for (i = n; i >= ; i--)
{
if (!vis[A[i]-'A'+])
{
ord[++len] = A[i] - 'A' + ;
vis[A[i]-'A'+] = true;
}
if (!vis[B[i]-'A'+])
{
ord[++len] = B[i] - 'A' + ;
vis[B[i]-'A'+] = true;
}
if (!vis[C[i]-'A'+])
{
ord[++len] = C[i] - 'A' + ;
vis[C[i]-'A'+] = true;
}
}
dfs(); return ; }
【NOIP 2004】 虫食算的更多相关文章
- NOIP 2004 虫食算题解
问题 E: [Noip2004]虫食算 时间限制: 1 Sec 内存限制: 128 MB 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一 ...
- Codevs 1064 虫食算 2004年NOIP全国联赛提高组
1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所谓虫食算,就是原先的算式 ...
- 虫食算 2004年NOIP全国联赛提高组(dfs)
1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Descrip ...
- 深度优先搜索 codevs 1064 虫食算
codevs 1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所 ...
- 洛谷 P1092 虫食算 Label:dfs
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- codevs1064 虫食算
题目描述 Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 + 8468#6 ...
- NOIP2004 虫食算
描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子:43#9865#045+ 8468#6633= 44445506678其中#号代表 ...
- Luogu P1092 虫食算
题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 其中# ...
- 【NOIP2004】【CJOJ1703】【洛谷1092】虫食算
题面 题目描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +8468#6633 44445509678 ...
- 【NOIP2004】虫食算
Description 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子: 43#9865#045 +. 8468#6633 444455 ...
随机推荐
- VMWare 在物理机待机后,报错“该虚拟机似乎正在使用中”
在物理机待机后,刚打开虚拟机,就弹出这个画面(这种情况经常出现在远程之后,本机待机之后) 点击确定后,就弹出 当点击取消,无反应,而且再次点击VM2又弹出以上窗口,点击获取所有权,则弹出以下窗口 上网 ...
- windows常用的cmd命令和常用操作。
这几日部署Jenkins,牵扯到很多东西,比如用到许多cmd命令和Linux命令.查找比较花时间,因此将查看的文档留下,以避免下次重新查找浪费时间. Windows cmd命令: http://blo ...
- C++多行文本读取
使用的多行读取的代码如下: //读取文本浮点数到多个模式 序列 bool CPicToolsDlg::readTxt2SeqMulti( std::string TxtName, std::vecto ...
- (1)dotnet开源电商系统-brnshop&brnMall 和老外开发的nopCommerce(dotnet两套电商来PK--第一篇)
一直想做电商软件,但是实在不想学PHP了,所以前后关注了这两个开源电商系统.一个是国人出品的,一个据说是俄罗斯人写得(不知道对不对).目前两个开源软件都在学习了解中,以下的博文可能会涉及到这两套系统, ...
- NSURLCredential 代表认证结果证书?
NSURLCredential 代表认证结果证书?
- 模拟登录新浪微博(Python)
PC 登录新浪微博时, 在客户端用js预先对用户名.密码都进行了加密, 而且在POST之前会GET 一组参数,这也将作为POST_DATA 的一部分. 这样, 就不能用通常的那种简单方法来模拟POST ...
- Socket编程(day14)
一.基于TCP传输层的编程模型 TCP是面向连接的,安全可靠的. 三次握手 服务器端编程模型 .创建一个用于网络通讯的设备 通讯端点 socket() #include <sys/types.h ...
- JS移动客户端--触屏滑动事件及js手机拖拽效果
移动端触屏滑动的效果其实就是图片轮播,在PC的页面上很好实现,绑定click和mouseover等事件来完成.但是在移动设备上,要实现这种轮播的效果,就需要用到核心的touch事件.处理touch事件 ...
- 优化 RequireJS 项目(合并与压缩) 【已翻译100%】
英文原文:Optimize (Concatenate and Minify) RequireJS Projects 标签: RequireJS Node.js 参与翻译 (1人) : 裴宝亮 本文将演 ...
- C#中三种弹出信息窗口的方式
弹出信息框,是浏览器客户端的事件.服务器没有弹出信息框的功能. 方法一: asp.net页面如果需要弹出信息框,则需要在前台页面上注册一个javascript脚本,使用alert方法.使用Client ...