#include<cstdio>
#include<cstdlib>
int n;
char** S;
int * r;
int m = 3;
void input() {
scanf("%d", &n);
S = new char*[m];
r = new int[m];
for (int i = 0; i < m; i++) {
S[i] = new char[n];
scanf("%d %s", &r[i], S[i]);
}
}
void convert(int i, char * s) {
for (int j = n - 1; j >= 0; j--) {
s[j] = i % 2 == 0 ? '0' : '1';
i /= 2;
}
}
int count(char * p, char * s) {
int res = 0;
for (int i = 0; i < n; i++) {
if (p[i] != s[i]) {
res ++;
}
}
return res;
}
bool check(int i, char * p) {
return count(p, S[i]) <= r[i];
}
int solve() {
int res = 0;
char * p = new char[n + 1];
p[n] = NULL;
for (int i = 0; i < (1 << n); i++) {
convert(i, p);
for (int j = 0; j < m; j++) {
if (check(j, p)) {
res++;
break;
}
}
}
return res;
}
int main() {
input();
printf("%d\n", solve());
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #include<cstdio> #include<cstdlib> int n; char** S; int * r; int m = 3; void input() { scanf("%d", &n); S = new char*[m]; r = new int[m]; for (int i = 0; i < m; i++) { S[i] = new char[n]; scanf("%d %s", &r[i], S[i]); } } void convert(int i, char * s) { for (int j = n - 1; j >= 0; j--) { s[j] = i % 2 == 0 ? '0' : '1'; i /= 2; } } int count(char * p, char * s) { int res = 0; for (int i = 0; i < n; i++) { if (p[i] != s[i]) { res ++; } } return res; } bool check(int i, char * p) { return count(p, S[i]) <= r[i]; } int solve() { int res = 0; char * p = new char[n + 1]; p[n] = NULL; for (int i = 0; i < (1 << n); i++) { convert(i, p); for (int j = 0; j < m; j++) { if (check(j, p)) { res++; break; } } } return res; } int main() { input(); printf("%d\n", solve()); return 0; } |
English