#include #include #include #include #include #include #include #include #include #include using namespace std; class Node { public: int num_ = -1; vector *nodes; Node(int number) : num_(number) { nodes = new vector(10, nullptr); } ~Node() { /*for (int i = 0; i < 10; i++) { delete (* nodes)[i]; } delete nodes;*/ } void addNum(const char* num, int zostava) { if (zostava > 0) { int cislica = num[0] - '0'; if ((*nodes)[cislica] == nullptr) { (*nodes)[cislica] = new Node(cislica); } (*nodes)[cislica]->addNum(num+1, zostava - 1); } } int najdicislo(const char* num, int zostava) { int tmp = 0; //cout << num[0] << " " << zostava < 0) { if (num[0] == '?') { for (int i = 0; i < 10; i++) { if ((*nodes)[i]) { tmp += (*nodes)[i]->najdicislo(num+1, zostava-1); } } } else { int cislica = num[0] - '0'; if ((*nodes)[cislica]) { tmp += (*nodes)[cislica]->najdicislo(num+1, zostava-1); } } } else { //cout << "psoledne cislo: " << num_ << " zos " <print(str+" "); } } }*/ }; int main() { ios_base::sync_with_stdio(0); int pocet = 0; cin >> pocet; string cislo; Node n(-1); for (int i = 0; i < pocet; i++) { cin >> cislo; n.addNum(cislo.c_str(), cislo.size()); } cin >> pocet; for (int i = 0; i < pocet; i++) { cin >> cislo; string n_cislo(9, '0'); int k = 0; auto it = std::find(cislo.begin(), cislo.end(), '*'); if (it != cislo.end()) { for (int j = 0; j < cislo.length(); j++) { if (cislo[j] != '*') { n_cislo[j + k] = cislo[j]; } else { for (; k < 9 - cislo.size() + 1; k++) { n_cislo[j + k] = '?'; } k--; } } cout << n.najdicislo(n_cislo.c_str(), 9) << "\n"; } else { //cout << "Nove cislo: " << n_cislo << endl; cout << n.najdicislo(cislo.c_str(), 9) << "\n"; } } return 0; }