有一股wa点,就是除相等判定的时候,不能直接/,因为酱紫没有保证整除
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<map>
#define Mod 100000000
typedef __int64 ll;
using namespace std;
int vis[12];
int pt[130];
char s1[10], s2[10],s3[10];
int l1,l2,l3;
char s[30];
int n1,n2,n3,ans;
void dfs(int l)
{
if(!s[l])
{
if(l1>1&&pt[s1[0]]==0)return;
if(l2>1&&pt[s2[0]]==0)return;
if(l3>1&&pt[s3[0]]==0)return;
int len=0;
n1=n2=n3=0;
while(s1[len])n1 = n1*10+pt[s1[len++]];
len=0;
while(s2[len])n2 = n2*10+pt[s2[len++]];
len=0;
while(s3[len])n3 = n3*10+pt[s3[len++]];
if(n2&&n2*n3==n1){ans++;}
if(n1*n2==n3){ans++; }
if(n1-n2==n3){ans++;}
if(n1+n2==n3){ans++; }
return;
}
if(pt[s[l]]==-1)
{
for(int i = 0; i <= 9; i++)
{
if(!vis[i])
{
vis[i] = 1;
pt[s[l]]=i;
dfs(l+1);
vis[i] = 0;
pt[s[l]]=-1;
}
}
}
else
{
dfs(l+1);
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(pt,-1,sizeof(pt));
memset(vis,0,sizeof(vis));
scanf("%s%s%s",s1,s2,s3);
l1=strlen(s1);
l2=strlen(s2);
l3=strlen(s3);
strcpy(s,s1);
strcpy(s+strlen(s),s2);
strcpy(s+strlen(s),s3);
ans = 0;
dfs(0);
printf("%d\n",ans);
}
return 0;
}