2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
基爷与加法等式
Time Limit: 20 Sec Memory Limit: 256 MB
题目连接
http://acm.uestc.edu.cn/#/contest/show/61
Description
一天,上小学的妹妹跑过来问基爷一道字母加法等式,基爷不假思索的便给出了一组可行解。
聪明的你发现,一个字母等式可能有多种不同解,于是你想编个程序计算一下
Input
每组数据第一行一个整数n,表示有n个字符串 3 ≤ n ≤ 10
接下来n行,每行有1个最多只含10个大写字母的字符串,前 n - 1 行的字符串表示加数,第 n 行的字符串表示和
每个样例最多只有10个互不相同的大写字母,每个字母表示 0 - 9 中的一个数,相同字母表示相同的数,不同字母表示不同的数输入包含多组数据。
每组数据第一行一个整数n,表示有n个字符串 3 ≤ n ≤ 10
接下来n行,每行有1个最多只含10个大写字母的字符串,前 n - 1 行的字符串表示加数,第 n 行的字符串表示和
每个样例最多只有10个互不相同的大写字母,每个字母表示 0 - 9 中的一个数,相同字母表示相同的数,不同字母表示不同的数
Output
对于每组数据输出一个整数,表示不同的可行解的数量。
对于两个可行解,只要有一个字母表示不同的数字,我们就认为这两个可行解不同
Sample Input
TAI
SHEN
LA
ACER
3
SEND
MORE
MONEY
Sample Output
1
HINT
如果各个字符串长度不等,右对齐后再运算每个字符串最左边的字母表示的数字不能为0不保证最后一个字符串的长度大于等于前面的表示加数的字符串长度
题意
题解:
直接爆搜就好了,唯一要注意的就是从低位开始搜
代码:
//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 200001
#define mod 10007
#define eps 1e-9
int Num;
char CH[];
//const int inf=0x7fffffff; //нчоч╢С
const int inf=0x3f3f3f3f;
/* inline void P(int x)
{
Num=0;if(!x){putchar('0');puts("");return;}
while(x>0)CH[++Num]=x%10,x/=10;
while(Num)putchar(CH[Num--]+48);
puts("");
}
*/
inline ll read()
{
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void P(int x)
{
Num=;if(!x){putchar('');puts("");return;}
while(x>)CH[++Num]=x%,x/=;
while(Num)putchar(CH[Num--]+);
puts("");
}
//************************************************************************************** int mp[];
int H[];
string s[];
int n,tmp;
char k[];
int vis[],ans=,ma;
int tp[];
int ans1[];
int ans2[];
int check()
{
ans1[ma]=;
for(int i=ma-;i>=;i--)
{
ans1[i]=;
ans2[i]=;
for(int j=;j<n-;j++)
{
if(H[s[j][i]-'A']==-)
return ;
ans1[i]+=H[s[j][i]-'A'];
}
ans1[i]+=(ans1[i+]/);
if(H[s[n-][i]-'A']==-)
return ;
ans2[i]+=H[s[n-][i]-'A'];
if((ans1[i]%)!=ans2[i])
return ;
}
if(ans1[]>)
return ;
return ;
}
void dfs(int x)
{
if(x==tmp)
{
ans++;
return;
}
for(int i=;i>=;i--)
{
if(i==&&tp[k[x]-'A'])
continue;
if(vis[i])
continue;
vis[i]=;
H[k[x]-'A']=i;
if(!check())
dfs(x+);
vis[i]=;
H[k[x]-'A']=-;
}
} int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=;i<;i++)
mp[i]=tp[i]=H[i]=;
ma=;
for(int i=;i<n;i++)
cin>>s[i],ma=max(ma,(int)s[i].size());
for(int i=;i<n;i++)
tp[s[i][]-'A']=;
for(int i=;i<n;i++)
{
int len=s[i].size();
for(int j=;j<ma-len;j++)
{
s[i]='['+s[i];
}
}
tmp=;
ans=;
for(int i=ma-;i>=;i--)
{
for(int j=;j<n;j++)
{
if(mp[s[j][i]-'A'])
continue;
if(s[j][i]=='[')
continue;
k[tmp++]=s[j][i];
mp[s[j][i]-'A']=;
}
}
for(int i=;i<tmp;i++)
H[k[i]-'A']=-; H['['-'A']=;
dfs();
printf("%d\n",ans);
}
}
2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS的更多相关文章
- 2015 UESTC 搜索专题D题 基爷的中位数 二分
基爷的中位数 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descr ...
- 2015 UESTC 搜索专题N题 韩爷的梦 hash
韩爷的梦 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descrip ...
- 2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
Eight Puzzle Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 ...
- 2015 UESTC 搜索专题E题 吴队长征婚 爆搜
吴队长征婚 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Descri ...
- 2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
秋实大哥の恋爱物语 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 De ...
- 2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
邱老师降临小行星 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Des ...
- 2015 UESTC 搜索专题M题 Palindromic String 马拉车算法
Palindromic String Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/s ...
- 2015 UESTC 搜索专题J题 全都是秋实大哥 kmp
全都是秋实大哥 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Desc ...
- 2015 UESTC 搜索专题A题 王之迷宫 三维bfs
A - 王之迷宫 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/61 Des ...
随机推荐
- SpringMVC可以配置多个拦截后缀*.action和.do等
首先介绍一下.do和.action的区别: struts早期的1版本,以.do为后缀. 同时spring的MVC也是以.do为后缀. 几年前struts收购鼎鼎大名的webwork2和开发团队后,将w ...
- discuz 积分按日重新计算,(摒弃以前24小时计算)
修改\source\module\forum\forum_misc.php将 foreach(C::t('forum_ratelog')->fetch_all_sum_score($_G['ui ...
- java各种链路工具性能监控工具
Zipkin , Instana 和 Jaeger cat链路追踪系统 用于监控spring 的运行情况,比如内存,线程,池等宏观数据 spring boot admin java反编译 jar xv ...
- CentOS 7.1使用yum安装MySql5.6.24
http://www.cnblogs.com/yuanfeiblog/p/5276492.html
- html清屏 meta http-equiv="refresh" content="3">
<meta http-equiv="refresh" content="3"> 什么意思? <meta http-equiv="re ...
- 字节对齐&&sizeof
转:http://blog.chinaunix.net/uid-722885-id-124878.html 1. sizeof应用在结构上的情况 请看下面的结构: struct MyStruct { ...
- 渗透常用SQL注入语句合集
1.判断有无注入点; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0<>(select ...
- iptables配置文件
https://www.cnblogs.com/itxiongwei/p/5871075.html
- android Webview Html5 相关文章
Android WebView的使用集锦(支持Html5) http://blog.csdn.net/l_215851356/article/details/69239643 WebView详解与简单 ...
- css弹性盒子
body元素设置: <body> <div id="wai"> <div class="zi">1</div> ...