Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define all(a) (a).begin(), (a).end()
- #define int long long
- const int n = 100;
- int dp[n][n];
- int p[n][n][2];
- char c[n][n];
- string s = ".-`|=+<(>)^*#@:'#";
- int k = 0;
- void print(int x, int y, int a, int b, int f=1) {
- if (a == 0 || b == 0)
- return;
- if (dp[a][b] <= 1 && f) {
- for (int i = x; i < x + a; ++i) {
- for (int j = y; j < y + b; ++j) {
- c[i][j] = s[k];
- }
- }
- k = (k + 1) % s.size();
- return;
- }
- int cut_x = p[a][b][0];
- int cut_y = p[a][b][1];
- print(x, y, cut_x, cut_y);
- print(x + cut_x, y, a - cut_x, cut_y);
- print(x, y + cut_y, cut_x, b - cut_y);
- print(x + cut_x, y + cut_y, a - cut_x, b - cut_y);
- }
- void solve() {
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- dp[i][j] = 1e9;
- }
- }
- for (int i = 1; i < n; ++i) {
- dp[0][i] = 0;
- dp[i][0] = 0;
- dp[1][i] = i;
- p[1][i][0] = 0;
- p[1][i][1] = i - 1;
- dp[i][1] = i;
- p[i][1][0] = i - 1;
- p[i][1][1] = 0;
- }
- for (int a = 2; a < n; ++a) {
- for (int b = 2; b < n; ++b) {
- for (int y = 0; y < b; ++y) {
- for (int x = 0; x < a; ++x) {
- int v = dp[x][y] + dp[a - x][y] + dp[x][b - y] + dp[a - x][b - y];
- if (v <= dp[a][b]) {
- dp[a][b] = v;
- p[a][b][0] = x;
- p[a][b][1] = y;
- }
- }
- }
- if (a == b) {
- dp[a][a] = 1;
- }
- }
- }
- int b = 73;
- print(0, 0, b, b, 0);
- for (int i = 0; i < b; ++i) {
- for (int j = 0; j < b; ++j) {
- cout << c[i][j];
- }
- cout << '\n';
- }
- }
- signed main() {
- ios::sync_with_stdio(0); cin.tie(0);
- solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement