#include <cstdio>
#include <cstdint>
#include <vector>
using namespace std;
#define MAX 3000
int n,m,a,b;
uint64_t M[MAX];
uint64_t R[MAX];
#define D(x)
#define D2(x)
#define MAX_N 31554432
uint64_t buf[2][MAX_N];
uint64_t buf_size[2];
uint64_t gen(uint64_t a) {
uint64_t v = 1;
v<<=a;
return v;
}
void printG(uint64_t g, const char *info = "") {
printf("%s", info);
for(int i=0;i<n;i++) {
printf("%d", (g&(1ULL<<i))?1:0);
}
printf("\n");
}
int main() {
scanf("%d %d",&n, &m);
for(int i=0;i<m;i++) {
scanf("%d %d", &a ,&b);
uint64_t ba = gen(a-1),bb = gen(b-1);
M[i]= ba| bb;
R[i]= ba;
}
printf("%d ",n%2);
for(int r=2;r<=n-1;r++) {
int bi = 0;
int bo = 1;
buf_size[0]=0;
for(int i=0;i<=n-r;i++) {
uint64_t v = 0;
for(int j=i;j<i+r;j++) {
v|=gen(j);
}
buf[bi][buf_size[bi]++] = v;
}
for(int i=m-1;i>=0;i--) {
D2(printf("wej\n");
for(auto v: buf[bi]) printG(v));
buf_size[bo] = 0;
for(int k=0;k < buf_size[bi];k++) {
uint64_t v =buf[bi][k];
uint64_t v2 = (v & M[i]);
D(printG(v, "v = ");
printG(M[i], "m = ");
printG(v2, "v2= "));
if (v2 == 0 || v2 == M[i]) buf[bo][buf_size[bo]++]=v;
else if (v2 != R[i]) {
buf[bo][buf_size[bo]++]= v;
buf[bo][buf_size[bo]++]= v^M[i];
}
if(buf_size[bo]>=MAX_N-4) break;
}
//printf("wyj: %d:\t%d\n",i , buf[bo].size());
D2(printf("wyj\n");
for(auto v: buf[bo]) printG(v);
printf("################\n"));
bi++;
bi%=2;
bo++;
bo%=2;
}
D2(printf("#################################################3#\n"));
printf("%d ", int(buf_size[bi])%2);
}
printf("1\n");
}
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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #include <cstdio> #include <cstdint> #include <vector> using namespace std; #define MAX 3000 int n,m,a,b; uint64_t M[MAX]; uint64_t R[MAX]; #define D(x) #define D2(x) #define MAX_N 31554432 uint64_t buf[2][MAX_N]; uint64_t buf_size[2]; uint64_t gen(uint64_t a) { uint64_t v = 1; v<<=a; return v; } void printG(uint64_t g, const char *info = "") { printf("%s", info); for(int i=0;i<n;i++) { printf("%d", (g&(1ULL<<i))?1:0); } printf("\n"); } int main() { scanf("%d %d",&n, &m); for(int i=0;i<m;i++) { scanf("%d %d", &a ,&b); uint64_t ba = gen(a-1),bb = gen(b-1); M[i]= ba| bb; R[i]= ba; } printf("%d ",n%2); for(int r=2;r<=n-1;r++) { int bi = 0; int bo = 1; buf_size[0]=0; for(int i=0;i<=n-r;i++) { uint64_t v = 0; for(int j=i;j<i+r;j++) { v|=gen(j); } buf[bi][buf_size[bi]++] = v; } for(int i=m-1;i>=0;i--) { D2(printf("wej\n"); for(auto v: buf[bi]) printG(v)); buf_size[bo] = 0; for(int k=0;k < buf_size[bi];k++) { uint64_t v =buf[bi][k]; uint64_t v2 = (v & M[i]); D(printG(v, "v = "); printG(M[i], "m = "); printG(v2, "v2= ")); if (v2 == 0 || v2 == M[i]) buf[bo][buf_size[bo]++]=v; else if (v2 != R[i]) { buf[bo][buf_size[bo]++]= v; buf[bo][buf_size[bo]++]= v^M[i]; } if(buf_size[bo]>=MAX_N-4) break; } //printf("wyj: %d:\t%d\n",i , buf[bo].size()); D2(printf("wyj\n"); for(auto v: buf[bo]) printG(v); printf("################\n")); bi++; bi%=2; bo++; bo%=2; } D2(printf("#################################################3#\n")); printf("%d ", int(buf_size[bi])%2); } printf("1\n"); } |
English