E - Easy problem 刚刚随便交了一发过了,来讲下自己的做法

一眼没构出来,但是考虑到1e18的数有18位数,显然rand足够多次,大概率是可以得到满足要求的答案的。于是写一个shuffle随机跑,很容易就跑出来了()

并没有想到怎么hack这种解法,但如果数据范围开到2e6,随机大概是过不了的罢()

#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
typedef long long ll;

mt19937 gen(time(0));

void solve()
{
	ll x, k;
	cin >> x >> k;

	vector<int> v, vv;
	for (int i = 1; i <= k; i++) {
		int d;
		cin >> d;
		v.push_back(d);
	}
	for (int i = 0; i <= 9; i++)
		vv.push_back(i);

	auto check = [&](ll k) {
		bool f[10] = {};
		while (k) {
			f[k % 10] = 1;
			k /= 10;
		}

		for (auto x : v) {
			if (!f[x])
				return 0;
		}
		return 1;
	};

	for (;;) {
		shuffle(vv.begin(), vv.end(), gen);

		ll num = 0;
		for (auto x : vv)
			num = num * 10 + x;

		if (check(num * x)) {
			cout << num * x << endl;
			break;
		}
	}
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	int t;
	cin >> t;

	while (t--)
		solve();
}