Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<vector>
- #include<string>
- using namespace std;
- class Tree {
- public:
- size_t topPos;
- size_t height;
- size_t triangles;
- };
- void print(Tree& tree, vector<string>& image, vector<Tree>& trees) {
- if (tree.height > image.size()) {
- size_t size = image.size();
- for (int i = 0; i < tree.height - size; ++i) {
- string newStr;
- newStr.assign(image[0].size(), '.');
- image.push_back(newStr);
- }
- }
- size_t new_top = trees.back().topPos + trees.back().height + trees.back().triangles - 1;
- bool flag = true;
- while (flag) {
- flag = false;
- for (size_t i = tree.triangles; i >= 0; --i) {
- size_t height = (i + 1) * tree.height + i * (i + 1) / 2 - 1;
- if ((height < image.size()) && (new_top - tree.height - i < image[0].size()) &&
- (image[height][new_top - tree.height - i] == '#') ||
- (height + 1 < image.size()) && (image[0].size() > new_top - tree.height - i) &&
- image[height][new_top - tree.height - i] == '#' ||
- (height - 1 > 0) && (height - 1 < image.size()) &&
- (image[0].size() > new_top - tree.height - i) &&
- image[height][new_top - tree.height - i] == '#') {
- flag = true;
- ++new_top;
- break;
- }
- }
- }
- tree.topPos = new_top;
- if (new_top + tree.height - 1 + tree.triangles >= image[0].size()) {
- string dop;
- dop.assign(new_top + tree.height + tree.triangles - image[0].size() - 1, '.');
- size_t imageSize = image.size();
- for (size_t i = 0; i < imageSize; ++i) {
- image[i] += dop;
- }
- }
- for (size_t i = 0; i < tree.triangles; ++i) {
- size_t start = i * tree.height + (i * (i - 1)) / 2;
- for (size_t j = 0; j < tree.height + i; ++j) {
- for (int k = 0; k <= j; ++k) {
- image[start + j][new_top + k] = '#';
- image[start + j][new_top - k] = '#';
- }
- }
- }
- trees.push_back(tree);
- }
- int main() {
- int queries;
- cin >> queries;
- Tree tree;
- cin >> tree.triangles >> tree.height;
- tree.topPos = tree.height + tree.triangles - 2;
- vector<Tree> trees;
- trees.push_back(tree);
- vector<string> image;
- string str;
- str.assign(tree.topPos + tree.height + tree.triangles - 1 , '.');
- for (size_t i = 0; i < tree.height * tree.triangles +
- (tree.triangles * (tree.triangles - 1)) / 2; ++i) {
- image.push_back(str);
- }
- for (size_t i = 0; i < tree.triangles; ++i) {
- size_t start = i * tree.height + (i * (i - 1)) / 2;
- for (size_t j = 0; j < tree.height + i; ++j) {
- for (size_t k = 0; k <= j; ++k) {
- image[start + j][tree.topPos + k] = '#';
- image[start + j][tree.topPos - k] = '#';
- }
- }
- }
- for (size_t i = 1; i < queries; ++i) {
- cin >> tree.triangles >> tree.height;
- print(tree, image, trees);
- }
- size_t imageSize = image.size();
- for (size_t i = 0; i < imageSize; ++i) {
- cout << image[i] << endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement