#include <iostream> #include <unordered_map> using namespace std; void addPointsToMap(int r, int i, int numOfChanged, string s, unordered_map<string, int>* map, int* licznik) { if ((*map).find(s) == (*map).end()) { (*map)[s] = 1; (*licznik) = ((*licznik) + 1) % 1000000007; } // cout << s << '\n'; if (numOfChanged == r || i == s.size()) { return; } addPointsToMap(r, i + 1, numOfChanged, s, map, licznik); string tmp = s.substr(); tmp[i] = tmp[i] - '0' ? '0' : '1'; addPointsToMap(r, i + 1, numOfChanged + 1, tmp, map, licznik); } int main() { unordered_map<string, int> map; int n; int r; int licznik = 0; string tmp; cin >> n; for (int i = 0; i < 3; i++) { cin >> r; cin >> tmp; addPointsToMap(r, 0, 0, tmp, &map, &licznik); } cout << licznik << '\n'; return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <iostream> #include <unordered_map> using namespace std; void addPointsToMap(int r, int i, int numOfChanged, string s, unordered_map<string, int>* map, int* licznik) { if ((*map).find(s) == (*map).end()) { (*map)[s] = 1; (*licznik) = ((*licznik) + 1) % 1000000007; } // cout << s << '\n'; if (numOfChanged == r || i == s.size()) { return; } addPointsToMap(r, i + 1, numOfChanged, s, map, licznik); string tmp = s.substr(); tmp[i] = tmp[i] - '0' ? '0' : '1'; addPointsToMap(r, i + 1, numOfChanged + 1, tmp, map, licznik); } int main() { unordered_map<string, int> map; int n; int r; int licznik = 0; string tmp; cin >> n; for (int i = 0; i < 3; i++) { cin >> r; cin >> tmp; addPointsToMap(r, 0, 0, tmp, &map, &licznik); } cout << licznik << '\n'; return 0; } |