#include using namespace std; int main(){ const int N = 666; // まず 332 x 332 の粗いグリッド上で図形を作る const int C = 332; const int H = 150; const int GAP = 32; const int W = 330; const int BOT = H + GAP; // 182 const int XT = 166; vector q(C, string(C, '.')); // 上側の櫛 // 右端に縦棒、3行ごとに横棒 for(int i = 0; i < H; i++){ q[i][1 + W - 1] = '#'; if(i % 3 == 1){ for(int j = 1; j < 1 + W; j++){ q[i][j] = '#'; } } } // 下側の櫛 // 左端に縦棒、3行ごとに横棒 for(int i = 0; i < H; i++){ q[BOT + i][1] = '#'; if(i % 3 == 0){ for(int j = 1; j < 1 + W; j++){ q[BOT + i][j] = '#'; } } } // 2つの櫛を連結 for(int i = H - 1; i <= BOT; i++){ q[i][XT] = '#'; } /* 粗いグリッドの各 # を # ### # という十字型に置き換える。 中心 (i,j) -> (2i+1, 2j+1) */ vector base(N, string(N, '.')); const int dy[5] = {0, 1, -1, 0, 0}; const int dx[5] = {0, 0, 0, 1, -1}; for(int i = 0; i < C; i++){ for(int j = 0; j < C; j++){ if(q[i][j] != '#') continue; int y = 2 * i + 1; int x = 2 * j + 1; for(int d = 0; d < 5; d++){ base[y + dy[d]][x + dx[d]] = '#'; } } } vector g1 = base; vector g2 = base; vector g3 = base; // ここだけ G1 に 1 マス追加 // 1-indexed では (293, 659) g1[292][658] = '#'; cout << N << '\n'; for(const auto& s : g1) cout << s << '\n'; for(const auto& s : g2) cout << s << '\n'; for(const auto& s : g3) cout << s << '\n'; return 0; }