#include #include #include #include #include #include using namespace std; typedef vector VS; typedef vector VI; const int CASES = 200; const int MAXD = 10; int num_cases = CASES; void dump(const VS& g) { cout << g.size() << ' ' << g[0].size() << endl; for (auto &x : g) cout << x << endl; --num_cases; } void gen_sample() { VS g1 = {"101", "000"}; dump(g1); VS g2 = {"11", "11"}; dump(g2); VS g3 = {"10", "01"}; dump(g3); } VI randvec(int n) { VI v(n); for (int i = 0; i < n; ++i) v[i] = i; for (int i = n-1; i > 0; --i) swap(v[i], v[rand()%(i+1)]); return v; } VS gen_grid(int r, int c, int fr, int fc) { VI r1 = randvec(r), c1 = randvec(c); VS g(r, string(c, '0')); for (int i = 0; i < fr; ++i) for (int j = 0; j < fc; ++j) g[r1[i]][c1[j]] = '1'; return g; } void gen_ok(int r, int c, int fr, int fc) { dump(gen_grid(r, c, fr, fc)); } void gen_bad(int r, int c, int fr, int fc, char x) { VS g = gen_grid(r, c, fr, fc); while (true) { int i = rand()%r, j = rand()%c; if (g[i][j] != x) { g[i][j] = x; break; } } dump(g); } void gen_rand(int r, int c) { VS g(r); for (int i = 0; i < r; ++i) for (int j = 0; j < c; ++j) g[i] += ((rand()&1) ? "1" : "0"); dump(g); } int main() { cout << num_cases << endl; gen_sample(); gen_ok(1, 1, 0, 0); gen_ok(1, 2, 0, 0); gen_ok(2, 1, 0, 0); gen_ok(1, MAXD, 0, 0); gen_ok(MAXD, 1, 0, 0); gen_ok(MAXD, MAXD, 0, 0); gen_ok(1, 1, 1, 1); gen_ok(1, 2, 1, 1); gen_ok(1, 2, 1, 2); gen_ok(2, 1, 1, 1); gen_ok(2, 1, 2, 1); gen_ok(2, 2, 2, 2); gen_ok(2, 2, 1, 1); gen_ok(2, 2, 1, 2); gen_ok(1, MAXD, 1, MAXD); gen_ok(MAXD, 1, MAXD, 1); gen_ok(1, MAXD, 1, 1); gen_ok(MAXD, 1, 1, 1); gen_ok(MAXD, MAXD, 1, 1); gen_ok(MAXD, MAXD, 1, MAXD); gen_ok(MAXD, MAXD, MAXD, 1); gen_ok(MAXD, MAXD, 2, MAXD); gen_ok(MAXD, MAXD, MAXD, 2); gen_ok(MAXD, MAXD, MAXD, MAXD); gen_bad(2, 2, 2, 2, '0'); gen_bad(3, 3, 3, 2, '0'); gen_bad(MAXD, 2, MAXD, 2, '0'); gen_bad(2, MAXD, 2, MAXD, '0'); gen_bad(MAXD, MAXD, MAXD, MAXD, '0'); gen_bad(MAXD, MAXD, 2, 2, '0'); gen_bad(2, 2, 1, 2, '1'); gen_bad(2, 3, 2, 2, '1'); gen_bad(MAXD, MAXD, 2, 1, '1'); gen_bad(MAXD, MAXD, 2, 1, '1'); gen_bad(MAXD, MAXD, 2, 1, '1'); gen_bad(MAXD, MAXD, 2, 2, '1'); gen_bad(MAXD, MAXD, 2, 2, '1'); gen_bad(MAXD, MAXD, 2, 2, '1'); gen_bad(MAXD, MAXD, MAXD-1, MAXD-1, '1'); gen_bad(MAXD, MAXD, MAXD-1, MAXD-1, '1'); gen_bad(MAXD, MAXD, MAXD-1, MAXD-1, '1'); int num_empty = 5; int half = 50; int full_rand = 30; while (num_cases) { int r = 2+rand()%(MAXD-1), c = 2+rand()%(MAXD-1); if (num_empty) { --num_empty; gen_ok(r, c, 0, 0); continue; } if (full_rand) { --full_rand; gen_rand(r, c); continue; } int fr = 1+rand()%r, fc = 1+rand()%c; if (half) { --half; fr = r/2+1; fc = c/2+1; } if (rand()&1) gen_ok(r, c, fr, fc); else { bool b = (rand()&1); // a good case may be generated, e.g. if r == 1 or c == 1 if (b || (fr == r && fc == c)) gen_bad(r, c, fr, fc, '0'); else gen_bad(r, c, fr, fc, '1'); } } return 0; }