#include <bits/stdc++.h>
#define in insert
#define sz size()
#define MAX 10000
using namespace std;
int n,r;
bitset <MAX> b;
char s[MAX+1];
set <string> m;
void rec(void (*f)(bitset <MAX>), int n, int k, int i=0, bitset <MAX> w=0) {
if (k==0) {
(*f)(w);
}
for (int j=i; j<n; ++j) {
w[j]=1;
rec(f,n,k-1,j+1,w);
w[j]=0;
}
}
int main() {
scanf("%d",&n);
for (int i=0; i<3; ++i) {
scanf("%d %s",&r,&s);
for (int j=0; j<n; ++j) b[j]=s[j]-48;
for (int j=0; j<=r; ++j) {
rec(
[](bitset <MAX> a) {
m.in((a^b).to_string());
},n,j);
}
}
printf("%d\n",m.sz);
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 | #include <bits/stdc++.h> #define in insert #define sz size() #define MAX 10000 using namespace std; int n,r; bitset <MAX> b; char s[MAX+1]; set <string> m; void rec(void (*f)(bitset <MAX>), int n, int k, int i=0, bitset <MAX> w=0) { if (k==0) { (*f)(w); } for (int j=i; j<n; ++j) { w[j]=1; rec(f,n,k-1,j+1,w); w[j]=0; } } int main() { scanf("%d",&n); for (int i=0; i<3; ++i) { scanf("%d %s",&r,&s); for (int j=0; j<n; ++j) b[j]=s[j]-48; for (int j=0; j<=r; ++j) { rec( [](bitset <MAX> a) { m.in((a^b).to_string()); },n,j); } } printf("%d\n",m.sz); return 0; } |
English