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();
}