2080 : A+B or A-B(点击左侧标题进入zznu原题页面)

时间限制:1 Sec 内存限制:0 MiB
提交:8 答案正确:3

提交 状态 讨论区

题目描述

Give you three strings s1, s2 and s3. These strings contain only capital letters A,B,C,D,E. The letters that appear in the string represent a number from 0 to 9.Each letter represents a different number.Now we want to know how many four equations these strings can form. In other words, you need to calculate how many ways that s1+s2=s3
or s1-s2=s3 or s1*s2=s3 or s1/s2=s3. Notice that the leading 0 is not legal.

输入

Multiple sample input until the end of the file
The three strings represent s1, s2, s3, and their length will not exceed 5

输出

The total number of ans

样例输入

复制
A A A

样例输出

复制
5

简单分析:
Each letter represents a different number ,要求不重复枚举;
Notice that the leading 0 is not legal. 要求组合的数前面没有空0.
其余想说的话都在代码注释里:
#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<stdlib.h>
#include<math.h>
using namespace std;
#define N 19
const int inf=0x3f3f3f3f;
int num[][N],l1,l2,l3; //num[x][y] 表示第x个字符串对应的第y个字符大小
int have[]; int legal(int s1,int s2,int s3) //合法情况只有 是个位数或者 位数等于表示的字符数
{
int len1,len2,len3;
if(s1==)len1=;
else len1=(int)log10(s1)+;
if(s2==)len2=;
else len2=(int)log10(s2)+;
if(s3==)len3=;
else len3=(int)log10(s3)+; if(l1>&&len1<l1)
return ;
if(l2>&&len2<l2)
return ;
if(l3>&&len3<l3)
return ;
return ;
}
int repeat(int a,int b,int c,int d,int e){
if(a==b||a==c||a==d||a==e||
b==c||b==d||b==e||
c==d||c==e||
d==e)
return ;
else
return ;
}
int fact()
{
int s1,s2,s3,ans=;
int i[],j,k; //i[1~5]依次枚举ABCDE五个数!
for(i[]=;i[]<=;i[]++){
for(i[]=;i[]<=;i[]++){
for(i[]=;i[]<=;i[]++){
for(i[]=;i[]<=;i[]++){
for(i[]=;i[]<=;i[]++){
s1=s2=s3=;
//.Each letter represents a different number
if(repeat(i[],i[],i[],i[],i[])==) //去重
continue; for(j=;j<=l1;j++) //枚举num【1】【】的每位进行组合!
s1=s1*+ i[num[][j]];
for(j=;j<=l2;j++) //枚举num【2】【】的每位进行组合!
s2=s2*+ i[num[][j]];
for(j=;j<=l3;j++) //枚举num【3】【】的每位进行组合!
s3=s3*+ i[num[][j]]; if(legal(s1,s2,s3)==){ ///Notice that the leading 0 is not legal.
//下面两行为调试代码,解封可以看到搜索过程!
// if(s1+s2==s3||s1-s2==s3||s1*s2==s3||(s2!=0&&s1%s2==0&&s1/s2==s3))
// printf("**%d)****%d %d %d\n",ans,s1,s2,s3);
if(s1+s2==s3)ans++;
if(s1*s2==s3)ans++;
if(s1-s2==s3)ans++;
if(s2!=&&s1%s2==&&s1/s2==s3)ans++; //整数必要要用s1%s2==0,不然3/2==1!!
} for(k=;k<=;k++)//直接结束不必要的循环!!比如只有ABC,而没有DE,需要少跑两重循环
if(!have[k])i[k]=;
}
}
}
}
}
return ans;
}
int main()
{
int i,j,k,m,n;
char str[N];
while(scanf("%s",str)!=EOF)
{
memset(have,,sizeof(have));
l1=strlen(str);
for(i=;i<strlen(str);i++){
num[][i+]=str[i]-'A'+;
have[num[][i+]]=;
} scanf("%s",str);
l2=strlen(str);
for(i=;i<strlen(str);i++){
num[][i+]=str[i]-'A'+;
have[num[][i+]]=;
} scanf("%s",str);
l3=strlen(str);
for(i=;i<strlen(str);i++){
num[][i+]=str[i]-'A'+;
have[num[][i+]]=;
}
// printf("%d\n",legal(1,1,0));
printf("%d\n",fact());
} return ;
} /*样例输入
A A A
AB BA AB
A B C
样例输出
5
0
72
*/

ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】的更多相关文章

  1. [Swust OJ 763]--校门外的树 Plus(暴力枚举)

    题目链接:http://acm.swust.edu.cn/problem/0763/ Time limit(ms): 1000 Memory limit(kb): 65535 西南某科技大学的校门外有 ...

  2. CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。

    1514: Packs Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 61  Solved: 4[Submit][Status][Web Board] ...

  3. BestCoder Round #50 (div.1) 1002 Run (HDU OJ 5365) 暴力枚举+正多边形判定

    题目:Click here 题意:给你n个点,有多少个正多边形(3,4,5,6). 分析:整点是不能构成正五边形和正三边形和正六边形的,所以只需暴力枚举四个点判断是否是正四边形即可. #include ...

  4. sdut oj 2372 Annoying painting tool (【暴力枚举测试】1Y )

    Annoying painting tool 题目描述 Maybe you wonder what an annoying painting tool is? First of all, the pa ...

  5. LeetCode OJ 题解

    博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...

  6. USACO Section 1.3 题解 (洛谷OJ P1209 P1444 P3650 P2693)

    usaco ch1.4 sort(d , d + c, [](int a, int b) -> bool { return a > b; }); 生成与过滤 generator&& ...

  7. 【学术篇】oj.jzxx.net2701 无根树

    这是一道来自OIerBBS的题目.. 原帖地址:http://www.oierbbs.com/forum.php?mod=viewthread&tid=512?fromuid=71 (似乎是个 ...

  8. Comet OJ - Contest #5

    Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下, ...

  9. POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)

    本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...

随机推荐

  1. 【GStreamer开发】GStreamer基础教程11——调试工具

    目标 有时我们的应用并没有按照我们的预期来工作,并且在总线上获得的错误信息也没有足够的内容.这时我们该怎么办呢?幸运的时,GStreamer自身提供了大量的调试信息,通常这些信息会给出一些线索,指向出 ...

  2. svn查看登录过的账号密码

    直接下载:http://www.leapbeyond.com/ric/TSvnPD/

  3. PHP比较两个版本的方法

    PHP比较两个版本的方法 写app接口经常要用到 PHP接口的版本和app里面的版本做比较 如果app版本低于接口版本 那么就要提示他升级 <pre><?php/** * 版本处理类 ...

  4. QT QML之Label, TextField

    现在不是去想缺少什么的时候,该想一想凭现有的东西你能做什么.------ 海明威 <老人与海> Label { id: tipLabel width: 120 height: 40 tex ...

  5. LeetCode 199. 二叉树的右视图(Binary Tree Right Side View)

    199. 二叉树的右视图 199. Binary Tree Right Side View 题目描述 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值. Giv ...

  6. linux定时任务每隔5分钟向文本追加一行

    编写shell脚本 test.sh内容如下,上传到linux的root目录 更改文件权限 chmod  777   test.sh 编辑定时任务 crontab  -e */5    *  *  *  ...

  7. [转帖]Dockerfile: ENTRYPOINT和CMD的区别

    Dockerfile: ENTRYPOINT和CMD的区别 https://zhuanlan.zhihu.com/p/30555962 在我们查阅Dockerfile的官方文档时, 有可能发现一些命令 ...

  8. Linux下查看压缩文件内容的 10 种方法

    Linux下查看压缩文件内容的 10 种方法 通常来说,我们查看归档或压缩文件的内容,需要先进行解压缩,然后再查看,比较麻烦.今天给大家介绍 10 不同方法,能够让你轻松地在未解压缩的情况下查看归档或 ...

  9. eclipse设置text file encoding UTF-8和文件的换行符 Unix 格式

    阿里华山版java开发手册代码格式第10条: 步骤:1.Window - Preferences, 2.左边选择 General - Workspace , 3.右边Text file encodin ...

  10. nodejs的安装与npm的介绍

    Node.js是一个Javascript运行环境(runtime environment),发布于2009年5月,由Ryan Dahl开发,实质是对Chrome V8引擎进行了封装.本文详细介绍了No ...