ZZNU - OJ - 2080 : A+B or A-B【暴力枚举】
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【暴力枚举】的更多相关文章
- [Swust OJ 763]--校门外的树 Plus(暴力枚举)
题目链接:http://acm.swust.edu.cn/problem/0763/ Time limit(ms): 1000 Memory limit(kb): 65535 西南某科技大学的校门外有 ...
- CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
1514: Packs Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 61 Solved: 4[Submit][Status][Web Board] ...
- BestCoder Round #50 (div.1) 1002 Run (HDU OJ 5365) 暴力枚举+正多边形判定
题目:Click here 题意:给你n个点,有多少个正多边形(3,4,5,6). 分析:整点是不能构成正五边形和正三边形和正六边形的,所以只需暴力枚举四个点判断是否是正四边形即可. #include ...
- sdut oj 2372 Annoying painting tool (【暴力枚举测试】1Y )
Annoying painting tool 题目描述 Maybe you wonder what an annoying painting tool is? First of all, the pa ...
- LeetCode OJ 题解
博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...
- 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&& ...
- 【学术篇】oj.jzxx.net2701 无根树
这是一道来自OIerBBS的题目.. 原帖地址:http://www.oierbbs.com/forum.php?mod=viewthread&tid=512?fromuid=71 (似乎是个 ...
- Comet OJ - Contest #5
Comet OJ - Contest #5 总有一天,我会拿掉给\(dyj\)的小裙子的. A 显然 \(ans = min(cnt_1/3,cnt_4/2,cnt5)\) B 我们可以感性理解一下, ...
- POJ题目分类(按初级\中级\高级等分类,有助于大家根据个人情况学习)
本文来自:http://www.cppblog.com/snowshine09/archive/2011/08/02/152272.spx 多版本的POJ分类 流传最广的一种分类: 初期: 一.基本算 ...
随机推荐
- face_code业务信息不匹配
face_code业务信息不匹配 检查获取 face code时的 appid, mch_id,out_trade_no以及可选的sub_mch_id , 与 face pay 时是否一致.
- 【GStreamer开发】GStreamer基础教程05——集成GUI工具
目标 本教程展示了如何在GStreamer集成一个GUI(比如:GTK+).最基本的原则是GStreamer处理多媒体的播放而GUI处理和用户的交互. 在这个教程里面,我们可以学到: 如何告诉GStr ...
- [BJOI2019] 删数 [dp转贪心结论+线段树]
题面 传送门 思路 dp部分 以下称合法序列为原题面中可以删空的序列 这个是我在模拟考场上的思路 一开始我是觉得,这个首先可以写成一个dp的形式:$dp[i][j]$表示用$j$个数字填满了目标序列的 ...
- 史上最浅显易懂的RxJava入门教程
RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...
- Flink状态管理和容错机制介绍
本文主要内容如下: 有状态的流数据处理: Flink中的状态接口: 状态管理和容错机制实现: 阿里相关工作介绍: 一.有状态的流数据处理# 1.1.什么是有状态的计算# 计算任务的结果不仅仅依赖于输入 ...
- (十七)springMvc 对表单提交的日期以及JSON中的日期的参数绑定
文章目录 前言 `Ajax`提交表单数据 `Ajax`提交`JSON` 格式数据 解决输出JSON乱码的问题 控制JSON输出日期格式 小记 前言 springMVC 提供强大的参数绑定功能,使得我们 ...
- 剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]
1 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 2 思路和方法 先给定一个二叉树的样式: ...
- PHP中的PDO数据对象
PDO: PHP Data Object:php的数据对象.pdo是数据库操作工具类!1,它能操作很多种数据库,比如mysql,oracle,sybase....2,它具有操作数据库的更多的功能,比如 ...
- 从零开始学Flask框架-005
表单 Flask-WTF 项目结构 pip install flask-wtf 为了实现CSRF 保护,Flask-WTF 需要程序设置一个密钥.Flask-WTF 使用这个密钥生成加密令牌,再用令牌 ...
- C++中的构造函数与析构函数及组合类的调用
// 构造函数与析构函数及类的组合 #include "stdafx.h"#include <iostream>using namespace std; //枚举enu ...