前言
思路
可以使用 d f s dfs dfs暴力出一个 9 9 9位数的全排列
然后通过双重循环去分割
CODE
// Problem: 带分数
// Contest: AcWing
// URL: https://www.acwing.com/problem/content/1211/
// Memory Limit: 64 MB
// Time Limit: 1000 ms
//
// Powered by CP Editor (https://cpeditor.org)
//��һ�δ��Ϻ�վ֮�� ��Ϊʹ��#define int long long TLE���¿��˺ܾõ�ʱ�� ���˼���ģ��
//����ʹ�ø��ӵ�ģ��
#include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;
#define IOS ios::sync_with_stdio(false);
#define CIT cin.tie(0);
#define COT cout.tie(0);
#define ll long long
#define x first
#define y second
#define pb push_back
#define endl '\n'
#define all(x) (x).begin(),x.end()
typedef priority_queue<int,vector<int>,greater<int>> Pri_m;
typedef pair<int,int> pii;
typedef vector<int> VI;
map<int,int> mp;
const int N = 10;
int n,cnt;
int num[N];//全排列结果
bool st[N];
int calc(int l,int r){
int res = 0 ;
for(int i = l;i<=r;i++){
res = res*10 + num[i];
}
return res;
}
void dfs(int u){
if(u == 9 ){
for(int i=0;i<7;i++){
for(int j =i+1;j<8;j++){
int a = calc(0,i);
int b = calc(i+1,j);
int c = calc(j+1,8);
if(a*c+b == c *n ){
++cnt;
}
}
}
}
for(int i=1;i<=9;i++){
if(!st[i]){
st[i] = 1;
num[u] = i;
dfs(u+1);
st[i] = 0;
}
}
}
void solve()
{
cin>>n;
dfs(0);
cout<<cnt<<endl;
}
/**mYHeart is my algorithm**/
int main()
{
//int t;cin>>t;while(t -- )
solve();
return 0;
}