Description

Math Olympiad is called “Aoshu” in China. Aoshu is very popular in elementary schools. Nowadays, Aoshu is getting more and more difficult. Here is a classic Aoshu problem:

ABBDE __ ABCCC = BDBDE

In the equation above, a letter stands for a digit(0 � 9), and different letters stands for different digits. You can fill the blank with ‘+’, ‘-‘ , ‘×’ or ‘÷’.

How to make the equation right? Here is a solution:

12245 + 12000 = 24245

In that solution, A = 1, B = 2, C = 0, D = 4, E = 5, and ‘+’ is filled in the blank.

When I was a kid, finding a solution is OK. But now, my daughter’s teacher tells her to find all solutions. That’s terrible. I doubt whether her teacher really knows how many solutions are there. So please write a program for me to solve this kind of problems.

 

Input

The first line of the input is an integer T( T <= 20) indicating the number of test cases.

Each test case is a line which is in the format below:

s1 s2 s3

s1, s2 and s3 are all strings which are made up of capital letters. Those capital letters only include ‘A’,’B’,’C’,’D’ and ‘E’, so forget about ‘F’ to ‘Z’. The length of s1,s2 or s3 is no more than 8.

When you put a ‘=’ between s2 and s3, and put a operator( ‘+’,’-‘, ‘×’ or ‘÷’.) between s1 and s2, and replace every capital letter with a digit, you get a equation.

You should figure out the number of solutions making the equation right.

Please note that same letters must be replaced by same digits, and different letters must be replaced by different digits. If a number in the equation is more than one digit, it must not have leading zero.

 

Output

For each test case, print an integer in a line. It represents the number of solutions. 
 

Sample Input

2
A A A
BCD BCD B
 

Sample Output

5
72
 
暴力
卡题原因:全排列过后数字是完全打乱的,这时候直接选取新的组合是错误的,必须恢复原来的顺序
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int per[5],temper[5];
char left[10],right[10],equ[10];
int index[5];
int del(char ch){
return index[ch-'A'];
}
int getnum(char* str){
int ans=0;
for(int i=0;str[i];i++){
ans*=10;
ans+=per[del(str[i])];
}
return ans;
}
void cpy(int *a,int *b,int len){
for(int i=0;i<len;i++)a[i]=b[i];
}
void pr(int lnum,int rnum,int equ,int op){
/*printf("%d ",lnum);
if(op==0)putchar('+');
else if(op==1)putchar('-');
else if(op==2)putchar('*');
else if(op==3)putchar('/');
printf(" %d = %d\n",rnum,equ);*/
}
int check(){
int ans=0;
int lnum=getnum(left),rnum=getnum(right),eqnum=getnum(equ);
if(lnum+rnum==eqnum){pr(lnum,rnum,eqnum,0);ans++;}
if(lnum-rnum==eqnum){pr(lnum,rnum,eqnum,1);ans++;}
if(lnum*rnum==eqnum){pr(lnum,rnum,eqnum,2);ans++;}
if(rnum!=0&&lnum/rnum==eqnum&&lnum%rnum==0){pr(lnum,rnum,eqnum,3);ans++;}
return ans;
}
int dfs(int s,int ind,int rlen,int llen,int elen,int allen){
int ans=0;
per[s]=ind;
if(s==allen-1){
cpy(temper,per,allen);//注意记录原值,否则因为顺序是反的,就不能直接修改取的数字
if(!((per[del(left[0])]==0&&llen>1)||(per[del(right[0])]==0&&rlen>1)||(per[del(equ[0])]==0&&elen>1)))
ans+=check();
while(next_permutation(per,per+allen)){
// for(int i=0;i<allen;i++)printf("%d%c",per[i],i==allen-1?'\n':' ');
if((per[del(left[0])]==0&&llen>1)||(per[del(right[0])]==0&&rlen>1)||(per[del(equ[0])]==0&&elen>1))continue;
ans+=check();
}
cpy(per,temper,allen);
}
else {
for(int i=ind+1;i<10;i++)ans+=dfs(s+1,i,llen,rlen,elen,allen);
}
return ans;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%s%s%s",left,right,equ);
int ans=0;
for(int i=0;i<5;i++)per[i]=i;
int llen=strlen(left),rlen=strlen(right),elen=strlen(equ);
memset(index,-1,sizeof(index));
int allen=0;
for(int i=0;left[i];i++)if(index[left[i]-'A']==-1)index[left[i]-'A']=allen++;
for(int i=0;right[i];i++)if(index[right[i]-'A']==-1)index[right[i]-'A']=allen++;
for(int i=0;equ[i];i++)if(index[equ[i]-'A']==-1)index[equ[i]-'A']=allen++;
for(int i=0;i<10;i++)ans+=dfs(0,i,llen,rlen,elen,allen);
printf("%d\n",ans);
}
return 0;
}

  

hdu 3699 10 福州 现场 J - A hard Aoshu Problem 暴力 难度:0的更多相关文章

  1. hdu 3687 10 杭州 现场 H - National Day Parade 水题 难度:0

    H - National Day Parade Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  2. hdu 3695 10 福州 现场 F - Computer Virus on Planet Pandora 暴力 ac自动机 难度:1

    F - Computer Virus on Planet Pandora Time Limit:2000MS     Memory Limit:128000KB     64bit IO Format ...

  3. hdu 3697 10 福州 现场 H - Selecting courses 贪心 难度:0

    Description     A new Semester is coming and students are troubling for selecting courses. Students ...

  4. hdu 3694 10 福州 现场 E - Fermat Point in Quadrangle 费马点 计算几何 难度:1

    In geometry the Fermat point of a triangle, also called Torricelli point, is a point such that the t ...

  5. hdu 3696 10 福州 现场 G - Farm Game DP+拓扑排序 or spfa+超级源 难度:0

    Description “Farm Game” is one of the most popular games in online community. In the community each ...

  6. hdu 3682 10 杭州 现场 C - To Be an Dream Architect 简单容斥 难度:1

    C - To Be an Dream Architect Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...

  7. hdu 3682 10 杭州 现场 C To Be an Dream Architect 容斥 难度:0

    C - To Be an Dream Architect Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...

  8. hdu 3685 10 杭州 现场 F - Rotational Painting 重心 计算几何 难度:1

    F - Rotational Painting Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  9. hdu 3262 09 宁波 现场 C - Seat taking up is tough 暴力 难度:0

    Description Students often have problems taking up seats. When two students want the same seat, a qu ...

随机推荐

  1. 106 miles to Chicago---zoj2797(最短路问题,求概率,模板)

    题目链接:http://www.icpc.moe/onlinejudge/showProblem.do?problemId=1797 题意是有 n 个点 m 条边,从a到b的不被抓的概率是p,让求从点 ...

  2. 每日算法之三十五:Wildcard Matching

    模式匹配的实现,'?'代表单一字符,'*'代表随意多的字符.写代码实现两个字符串是否匹配. Implement wildcard pattern matching with support for ' ...

  3. Spark Shuffle(二)Executor、Driver之间Shuffle结果消息传递、追踪(转载)

    1. 前言 在博客里介绍了ShuffleWrite关于shuffleMapTask如何运行,输出Shuffle结果到Shuffle_shuffleId_mapId_0.data数据文件中,每个exec ...

  4. PAT 1112 Stucked Keyboard[比较]

    1112 Stucked Keyboard(20 分) On a broken keyboard, some of the keys are always stucked. So when you t ...

  5. Linux安装rpm包时报错Header V3 DSA/SHA1 Signature, key ID 1d1e034b: NOKEY解决办法

    这是因为yum安装了旧版本的GPG key造成的,解决办法: rpm --import /etc/pki/rpm-gpg/RPM* Header V3 DSA/SHA1 Signature, key ...

  6. ng-深度学习-课程笔记-9: 机器学习策略1(Week1)

    1 为什么要应用机器学习策略( Why is machine learning strategy ) 当你想优化一个问题的时候,通常可以有很多尝试(比如收集更多数据,增加迭代次数,改用adam,改变网 ...

  7. myeclipse安装jadclipse(反编译工具)

    我是myeclipse5. 的IDE工具.为了能反编译class文件,上网搜索了很多资料,终于找到一下的一段资料: .将jad.exe 复制到myeclipse安装目录的jre/bin目录下, 如:C ...

  8. 使用docker创建aosp编译环境

    如果只需要编译一个版本的aosp,那么如果在主机上架建环境即可,可写的程序如果要在各个aosp版本中编译,那在主机上架建多个aosp编译环境可以会比较麻烦,github上找到一个openstf用doc ...

  9. Symmetric Tree,对称树

    问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...

  10. BZOJ 4011 【HNOI2015】 落忆枫音

    题目链接:落忆枫音 以下内容参考PoPoQQQ大爷的博客 首先我们先来考虑一下如果没有新加入的那条边,答案怎么算. 由于这是一个\(DAG\),所以我们给每个点随便选择一条入边,最后一定会构成一个树形 ...