#include #include #include #include using namespace std; vector getDigits(int number) { vector digits; int remainder = number % 10; digits.push_back(remainder); int quotient = number / 10; while (quotient > 0) { remainder = quotient % 10; digits.push_back(remainder); quotient = quotient / 10; } return digits; } int getTimesDividedBy(int number, int diviser) { int nums = 0; int remainder = number % diviser; while (remainder == 0) { nums++; number = number / diviser; remainder = number % diviser; } return nums; } int getTsuks(int number, vector set) { int tsuks = 0; vector digits = getDigits(number); for (int i = 0; i < set.size(); i++) { for (int j = 0; j < digits.size(); j++) { if (set[i] == digits[j]) tsuks++; } tsuks += getTimesDividedBy(number, set[i]); } return tsuks; } int main() { ifstream infile("tsuk.in"); int M, N; infile >> M; vector D(M); int i = 0; while (i < M) { infile >> D[i++]; } infile >> N; vector NSet(N); i = 0; while (i < N) { infile >> NSet[i++]; } ofstream outfile("tsuk.out"); queue q; for (int i = 1; i < 1000000; i++) { int currentTsuks = getTsuks(i, D); if (currentTsuks == NSet[q.size()]) { q.push(i); } else { if (q.size() > 0) { q.pop(); if (q.size() > 0) { i = q.front(); } } } if (q.size() == NSet.size()) { break; } } outfile << getTsuks(q.back() + 1, D); return 0; }