wa一个点求条
查看原帖
wa一个点求条
690243
houluyu楼主2024/8/28 16:38
#include<bits/stdc++.h>
#define ll long long
#define int long long
using namespace std;

const ll inf = 100000000000000;
ll n, ans[10000005];
int t[105], cnt, l, r = 10000005;
ll rever(int x)
{
	ll res = 0;
	cnt = 0;
	while(x)
	{
		if(x % 10 == 0)return inf;
		t[++ cnt] = x % 10;
		x /= 10;
	}
	for(int i = 1; i <= cnt; i ++)
	{
		res = res * 10 + t[i];
	}
	return res;
}
void dfs(ll x)
{
//	cout << 1 << endl;
	if(x == 1)
	{
//		cout << "ok" << endl;
		for(int i = 1; i <= l; i ++ )
		{
			if(i > 1)cout << "*";
			cout << ans[i];
		}
		for(int i = r; i < 10000005; i ++)
		{
			cout << "*" << ans[i] ;
		}
		exit(0);
	}
	for(ll i = 1; i * i <= x; i ++)
	{
		ll j = rever(i);
//		cout << i << ' ' << j << endl;
		if(x % j == 0 && x % i == 0 && x % (i * j) == 0 && i != 1)
		{
			l ++;r --;
			ans[l] = i;
			ans[r] = j;
			dfs(x / i / j);
			l --;r ++;		
		}
		if(x % i == 0)
		{
			ll ii = x / i;
			j = rever(ii);
			if(x % j == 0 && x % ii == 0 && x % (ii * j) == 0 && ii != 1)
			{
				l ++;r --;
				ans[l] = ii;
				ans[r] = j;
				dfs(x / ii / j);
				l --;r ++;				
			}
	
		}
	}
	ll tt = rever(x);
	if(tt == x)
	{
		ans[++ l] = x;
		dfs(1);
		l --;
	}
	return ;
}
signed main()
{
	cin >> n;
	dfs(n);
	cout << -1 << endl;
	return 0;
}
2024/8/28 16:38
加载中...