zoukankan      html  css  js  c++  java
  • 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
    ",ans);
    	}
    	return 0;
    }
    /*
    2
    A A A
    BCD BCD B
    */



  • 相关阅读:
    Linux下DNS服务器搭建详解
    Oracle 数据泵使用详解--精华版
    Oracle 数据泵详解
    数据泵
    Oracle11g数据库导入Oracle10g数据库操作笔记
    DNS服务器
    spring mvc发送请求404,不能进入处理方法,也不报错
    CentOS设置默认启动命令行(不启动图形界面)
    SQL Server 排序的时候使 null 值排在最后
    Git教程
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5094826.html
Copyright © 2011-2022 走看看