#include #include #include using namespace std; void drawPoint(char **& array, int m, int x, int y, char c) { if(x<0 || y<0 || x>=m || y>=m) return; array[y][x] = c; } void drawTree(char **& array, int m, int s, int x, int y) { drawPoint(array, m, x-1, y, '_'); drawPoint(array, m, x, y, '|'); drawPoint(array, m, x+1, y, '_'); for(int i = 0; i < s; i++) { drawPoint(array, m, x-1, y+i+1, '/'); drawPoint(array, m, x, y+i+1, '|'); drawPoint(array, m, x+1, y+i+1, '\\'); } drawPoint(array, m, x-1, y+s+1, '.'); drawPoint(array, m, x, y+s+1, '^'); drawPoint(array, m, x+1, y+s+1, '.'); } void drawStump(char **& array, int m, int s, int x, int y) { drawPoint(array, m, x-1, y, '_'); drawPoint(array, m, x, y, 'o'); drawPoint(array, m, x+1, y, '_'); } void addToArray(char **& array, int m, int s, int x, int y) { if(x>m || y>m || (y+s+2)<0) return; if(s>0) drawTree(array, m, s, x, y); else drawStump(array, m, s, x, y); } void print(char ** array, int size) { for(int i = 0; i < size+2; i++) { cout << "*"; } cout << endl; for(int i = 0; i < size; i++) { for(int j = 0; j < size; j++) { if(j==0) cout << "*"; cout << array[size-i-1][j]; if(j == size-1) cout << "*"; } cout << endl; } for(int i = 0; i < size+2; i++) { cout << "*"; } cout << endl; } void alloc(char **& array, int size) { array = new char*[size]; for(int i = 0; i < size; i++) { array[i] = new char[size]; for(int j = 0; j < size; j++) { array[i][j] = '.'; } } } int main(void) { int m,n; while(scanf("%d %d",&m,&n) != EOF) { int s, x, y; char ** array = NULL; alloc(array, m); for(int i = 0; i < n; i++) { scanf("%d %d %d",&s,&x,&y); addToArray(array, m, s, x, y); } print(array, m); cout << endl; } return 0; }