AcWing 1209. 带分数(改了一丢丢版)
原题链接
简单
作者:
Akac
,
2021-03-06 14:06:15
,
所有人可见
,
阅读 336
题目描述
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
int n;
int ans;
bool st[10],bk[10];
bool check(int a,int c)
{
int b;
memcpy(bk,st,sizeof st);
if(n - a == 0 || c == 0) return false;
if(c%(n-a) != 0) return false;
else
{
b = c / (n - a);
while(b)
{
int c = b%10;
if(c == 0) return false;
if(bk[c]) return false;
bk[c] = true;
b/=10;
}
}
for(int i = 1; i <= 9; i ++ ) if(!bk[i]) return false;
return true;
}
void dfs_c(int a,int c)
{
if(check(a,c)) ans ++;;
for(int i = 1; i <= 9 ; i ++ )
{
if(!st[i])
{
st[i] = true;
dfs_c(a,c*10+i);
st[i] = false;
}
}
}
void dfs_a(int a)
{
if(a > n) return;
if(a) dfs_c(a,0);
for(int i = 1; i <= 9 ; i ++ )
{
if(!st[i])
{
st[i] = true;
dfs_a(a*10+i);
st[i] = false;
}
}
}
int main()
{
cin >> n;
dfs_a(0);
cout << ans << endl;
return 0;
}