HDU 3699 A hard Aoshu Problem (暴力搜索)[通俗易懂]

HDU 3699 A hard Aoshu Problem (暴力搜索)

大家好,又见面了,我是全栈君。

题意:题意:给你3个字符串s1,s2,s3;要求对三个字符串中的字符赋值(同样的字符串进行同样的数字替换),


替换后的三个数进行四则运算要满足左边等于右边。求有几种解法。

Sample Input
   
   
2 A A A BCD BCD B

 


Sample Output
   
   
5 72

eg:ABBDE   ABCCC   BDBDE ;令 A = 1, B = 2, C = 0, D = 4, E = 5

12245 + 12000 = 24245;


注意没有前导零!



#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<string>
#include<queue>
#include<map>
#include<math.h>
#include<algorithm>
#include<iostream>
using namespace std;
const int kind = 26;
const int maxn = 250*1000; //注意RE,单词长度*单词个数
const int M = 5100000;
int vis[10],flag[10],l,ans;
char s1[10],s2[10],s3[10],s[10];
map<char,int>mp,dl;
void Cal()
{
	int a=0,b=0,c=0;
	for(int i=0;i<strlen(s1);i++)
		a=a*10+mp[s1[i]];
	for(int i=0;i<strlen(s2);i++)
		b=b*10+mp[s2[i]];
	for(int i=0;i<strlen(s3);i++)
		c=c*10+mp[s3[i]];
	if(a+b==c) ans++;
	if(a-b==c) ans++;
	if(a*b==c) ans++;
	if(b&&a==b*c) ans++;
}
void dfs(int num)
{
	if(num>=l) 
	{
		Cal();
		return;
	}
	for(int i=0;i<10;i++)
	{
		if(i==0&&dl[s[num]]) continue;
		if(!flag[i])
		{
			flag[i]=1;
			mp[s[num]]=i;
			dfs(num+1);
			flag[i]=0;
		}
	}
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		memset(vis,0,sizeof(vis));
		mp.clear();dl.clear();
		ans=0;
		scanf("%s%s%s",s1,s2,s3);
		if(strlen(s1)>1) dl[s1[0]]=1;
		if(strlen(s2)>1) dl[s2[0]]=1;
		if(strlen(s3)>1) dl[s3[0]]=1;
		int i,k,j;
		l=0;
		for(i=0;i<strlen(s1);i++)
		{
			if(vis[s1[i]-'A']) continue;
			vis[s1[i]-'A']++;
			s[l++]=s1[i];
		}
		for(i=0;i<strlen(s2);i++)
		{
			if(vis[s2[i]-'A']) continue;
			vis[s2[i]-'A']++;
			s[l++]=s2[i];
		}
		for(i=0;i<strlen(s3);i++)
		{
			if(vis[s3[i]-'A']) continue;
			vis[s3[i]-'A']++;
			s[l++]=s3[i];
		}
		dfs(0);
		printf("%d\n",ans);
	}
	return 0;
}
/*
2
A A A
BCD BCD B
*/


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116457.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 投影矩阵详解「建议收藏」

    投影矩阵详解「建议收藏」视锥就是场景中的一个三维空间,它的位置由视口的摄像机来决定。这个空间的形状决定了摄像机空间中的模型将被如何投影到屏幕上。透视投影是最常用的一种投影类型,使用这种投影,会使近处的对象看起来比远处的大一些。对于透视投影,视锥可以被初始化成金字塔形,将摄像机放在顶端。这个金字塔再经过前、后两个剪切面的分割,位于这两个面之间的部分就是视锥。只有位于视锥内的对象才可见。视锥由凹视野(  在

    2022年10月4日
    0
  • html网页动态日历代码_春节倒计时源码

    html网页动态日历代码_春节倒计时源码点击文章下面超链接,即可免费下载,源码以及文件素材,无需积分,关注后即可下载记得关注,只有关注后才可以下载!!!效果图:钟表以及时间文字显示会自动根据打开网页的时间,显示时间;无需自己修改,弹幕和文字皆可以修改;背景是渐变色彩,可根据自己的需要在源码中修改即可,除了主要功能是HTML意外,还有CSS、JS等源码,就算没有编程工具,电脑没有任何编程配置,只需要打开文件,鼠标双击运行index即可,会自动跳到系统默认浏览器内,就算毫无编程基础、英语小白页可以娱乐;本源码意在学习与娱乐,未经授权!!禁止商用

    2022年10月19日
    0
  • linux 解压缩zip文件 unzip 命令详解[通俗易懂]

    linux 解压缩zip文件 unzip 命令详解[通俗易懂]linuxunzip命令详解功能说明:解压缩zip文件语法:unzip[-cflptuvz][-agCjLMnoqsVX][-P][.zip文件][文件][-d][-x]或unzip[-Z]补充说明:unzip为.zip压缩文件的解压缩程序。参数:-c将解压缩的结果显示到屏幕上,并对字符做适当的转换。-f更新现有的文件。

    2022年6月5日
    42
  • Java基础篇:强制类型转换

    Java基础篇:强制类型转换

    2021年10月4日
    43
  • git查看自己的用户名和邮箱_查询邮箱用户名

    git查看自己的用户名和邮箱_查询邮箱用户名查看用户名和邮箱地址:$gitconfiguser.name$gitconfiguser.email修改用户名和邮箱地址:$gitconfig–globaluser.name”xxxx”Sgitconfig–globaluser.email”xxxx”…

    2022年9月6日
    2
  • 使用js,对数值保留小数点后两位的处理(两种情况)

    使用js,对数值保留小数点后两位的处理(两种情况)Html部分:<divclass=”textprimary-text”><span>合计:</span><spanclass=”money”>¥{{totalMoney|numFilter}}</span></div>Js部分:(注意toFixed方法只能用于数值型数据)//情况一:保留…

    2022年5月11日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号