Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <algorithm>
- int main() {
- size_t n;
- std::cin >> n;
- size_t w_max = 0, h_max = 0;
- std::vector<std::pair<size_t, size_t>> tr;
- tr.reserve(n);
- for (size_t i = 0; i < n; ++i) {
- size_t part_n, part_m;
- std::cin >> part_n >> part_m;
- tr.push_back({part_n, part_m});
- w_max += 2 * (part_m + part_n - 1) - 1;
- h_max = std::max(h_max, (part_m + part_n - 1) * (part_m + part_n) / 2 - (part_m - 1) * (part_m) / 2);
- }
- w_max += n - 1;
- size_t center_l, center_curr;
- std::vector<std::vector<bool>> picture(h_max, std::vector<bool>(w_max, false));
- std::vector<int> ban(h_max + 1);
- size_t ind = 0;
- center_curr = (tr[ind].first + tr[ind].second - 1) - 1;
- size_t ii = 0;
- for (size_t i = 0; i < tr[ind].first; ++i) {
- for (size_t j = 0; j < tr[ind].second + i; ++j) {
- for (size_t k = 0; k <= j; ++k) {
- picture[ii][center_curr + k] = true;
- picture[ii][center_curr - k] = true;
- }
- if (ii == 0) {
- ban[ii] = center_curr + 2;
- } else if (j + 1 == tr[0].second + i) {
- ban[ii] = center_curr + j + 1;
- ban[ii + 1] = ban[ii];
- } else if (j == 0) {
- } else {
- ban[ii] = center_curr + j + 2;
- }
- ++ii;
- }
- }
- center_l = center_curr;
- center_curr = center_l + 1;
- ind = 1;
- ii = 0;
- for (size_t i = 0; i < tr[ind].first; ++i) {
- for (size_t j = 0; j < tr[ind].second + i; ++j) {
- if (center_curr <= ban[ii] + j) {
- center_curr = j + ban[ii] + 1;
- }
- ++ii;
- }
- }
- size_t w = w_max;
- for (size_t t = 1; t < n; ++t) {
- size_t ind = t;
- size_t ii = 0;
- for (size_t i = 0; i < tr[ind].first; ++i) {
- for (size_t j = 0; j < tr[ind].second + i; ++j) {
- for (size_t k = 0; k <= j; ++k) {
- picture[ii][center_curr + k] = true;
- picture[ii][center_curr - k] = true;
- }
- if (ii == 0) {
- ban[ii] = center_curr + 2;
- } else if (j + 1 == tr[0].second + i) {
- ban[ii] = center_curr + j + 1;
- ban[ii + 1] = ban[ii];
- } else if (j == 0) {
- } else {
- ban[ii] = center_curr + j + 2;
- }
- ++ii;
- }
- }
- w = center_curr + tr[ind].first + tr[ind].second - 1;
- if (t + 1 == n) {
- break;
- }
- center_l = center_curr;
- center_curr = center_l + 1;
- ind = t + 1;
- ii = 0;
- for (size_t i = 0; i < tr[ind].first; ++i) {
- for (size_t j = 0; j < tr[ind].second + i; ++j) {
- if (center_curr <= ban[ii] + j) {
- center_curr = j + ban[ii] + 1;
- }
- ++ii;
- }
- }
- }
- for (size_t i = 0; i < h_max; ++i) {
- for (size_t j = 0; j < w; ++j) {
- if (picture[i][j]) {
- std::cout << '#';
- } else {
- std::cout << '.';
- }
- }
- std::cout << "\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement