zoukankan      html  css  js  c++  java
  • {POJ}{3989}{A hard Aoshu Problem}{DFS}

    10年福州赛区的题目,暴力搜索即可。

    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cstdio>
    #include <algorithm>
    #include <memory>
    #include <cmath>
    #include <bitset>
    #include <queue>
    #include <vector>
    #include <stack>
    using namespace std;
    
    #define CLR(x,y) memset(x,y,sizeof(x))
    #define MIN(m,v) (m)<(v)?(m):(v)
    #define MAX(m,v) (m)>(v)?(m):(v)
    #define ABS(x) ((x)>0?(x):-(x))
    #define rep(i,x,y) for(i=x;i<y;++i)
    
    char s1[10],s2[10],s3[10];
    char dir[10];
    bool bd[300];
    int bk[300];
    bool vb[100];
    long long a,b,c;
    int len1,len2,len3;
    int ans;
    int kk;
    int init()
    {
    	return 0;
    }
    int ai( char* str, int len)
    {
    	int i,tmp = 0;
    	if( bk[str[0]] == 0 && len > 1)
    		return -1;
    	rep(i,0,len)
    		tmp = tmp * 10 + bk[str[i]];
    	return tmp;
    }
    
    int dfs(int k)
    {
    	if(k == kk) {
    		a = ai(s1,len1);
    		b = ai(s2,len2);
    		c = ai(s3,len3);
    		if( a != -1 && b != -1 && c != -1) {
    			//printf("[%lld %lld %lld]",a,b,c);
    			if( a + b - c == 0) ++ans;
    			if( a - b - c == 0) ++ans;
    			if( a * b - c == 0) ++ans;
    			if( a - b * c == 0 && b != 0) ++ans;
    		}
    		return 0;
    	}
    	for( int i = 0; i < 10; ++i) {
    		if( vb[i] )
    			continue;
    		bk[dir[k]] = i;
    		vb[i] = true;
    		dfs(k+1);
    		vb[i] = false;
    	}
    	return 0;
    }
    int work()
    {
    	int cnt;
    	int i;
    	scanf("%d",&cnt);
    	while( cnt -- ){
    		CLR(vb,0);
    		CLR(bd,0);
    		cin>>s1>>s2>>s3;
    		len1 = strlen(s1);
    		rep(i,0,len1)
    			bd[s1[i]] = true;
    		len2 = strlen(s2);
    		rep(i,0,len2)
    			bd[s2[i]] = true;
    		len3 = strlen(s3);
    		rep(i,0,len3)
    			bd[s3[i]] = true;
    		kk = 0;
    		if( bd['A'] ) {
    			dir[kk] = 'A';
    			++kk;
    		}
    		if ( bd['B']) {
    			dir[kk] = 'B';
    			++kk;
    		}
    		if ( bd['C']) {
    			dir[kk] = 'C';
    			++kk;
    		}
    		if ( bd['D']) {
    			dir[kk] = 'D';
    			++kk;
    		}
    		if ( bd['E']) {
    			dir[kk] = 'E';
    			++kk;
    		}
    		ans = 0;
    		dfs(0);
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    int main()
    {
    	init();
    	work();
    	return 0;
    }
    

     

  • 相关阅读:
    周五笔记
    python2.0代码重构为3.0一日记
    小白使用Bert跑分类模型
    andrew ng 深度学习 网易云课堂课程
    andrew ng machine learning week9 异常检测和推荐系统
    解决端口占用问题
    postgresqlmysql删除数据表中字段的回车和换行
    echarts常用的属性修改
    后端返回文件流,用blog方式下载 type 值
    antD vue 遇到的一些问题处理
  • 原文地址:https://www.cnblogs.com/lvpengms/p/2501355.html
Copyright © 2011-2022 走看看