분형의 미

무엇 을 알 수 있겠는가


며칠 전에 좀 싸게 푸제이 2083 문제를 냈어요.단지 처음의 방법은 매우 어리석다!하위 그림을string으로 저장한 다음 다음 등급의 그림을 구성합니다.3*3의 하위 그림을 큰 그림으로 맞추면 나는 한 줄 한 줄 쓸어 들어왔다. 그래서 다음과 같다.
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 7
char str[N][800*800] = {"X\0"};
char ans[N][800][800];
int a[N] = {1}, f[N] = {1};
string tmp, blank;
string gao(string as, string bs, string cs, int d){
    string r = "";
    for(int i = 0;i < d;i++){
        for(int j = 0;j < d;j++)
            r += as[i*d+j];
        for(int j = 0;j < d;j++)
            r += bs[i*d+j];
        for(int j = 0;j < d;j++)
            r += cs[i*d+j];
    }
    return r;
}
int main()
{
    for(int i = 1;i < N;i++)
        a[i] = a[i-1] * 3;
    for(int i = 0;i < N;i++)
        f[i] = a[i] * a[i];
    for(int i = 1;i < N;i++){
        blank = tmp = "";
        for(int j = 0;j < f[i-1];j++){
            tmp += str[i-1][j];
            blank += ' ';
        }
        tmp = gao(tmp, blank, tmp, a[i-1]) + gao(blank, tmp, blank, a[i-1]) + gao(tmp, blank, tmp, a[i-1]);
        for(int j = 0;j < f[i];j++)
            str[i][j] = tmp[j];
    }
    int n;
    while(~scanf("%d", &n)){
        if(n == -1) break;
        n--;
        for(int i = 0;i < f[n];i++){
            if(i && i % a[n] == 0) printf("
"
); putchar(str[n][i]); } printf("
-
"
); } return 0; }

분형이 갑자기 나타나다


추하게 느껴졌어요. 그리고discuss를 봤는데 의외로 또 다른 문제인 POJ3678을 발견했어요. 이번에는 추하게 줄을 눌러서 스캔하면 안 돼요!분형을 말하자면 몇 개의 예쁜 그림이 기억났다.가장 간단한 하위 그림을 모형으로 만들면 큰 그림의 전체 형상은 모형의 확대판이다.서브맵을 채우고 들어갈 때 배치된 위치와 확대된 비율을 표시하면 큰 그림으로 작성할 수 있다.약간의 귀착의 뜻이 있어서 이렇게 짧다...
/*-------------------------------------------- * File Name: POJ 3678 * Author: Danliwoo * Mail: [email protected] * Created Time: 2016-05-23 12:25:53 --------------------------------------------*/
#include <cstdio>
#include <iostream>
#include <cstring>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;
#define N 7
char mp[N][3010][3010];
int a[N] = {1}, f[N] = {1};
void pt(int x, int y, int d){
    for(int i = 0;i < a[d];i++)
        for(int j = 0;j < a[d];j++)
            mp[d+1][x+i][y+j] = mp[d][i][j];
}
void dfs(int n){
    if(n == 0) return;
    dfs(n-1);
    for(int i = 0;i < a[0];i++)
        for(int j = 0;j < a[0];j++)
            if(mp[0][i][j] != ' ')
                pt(i*a[n-1], j*a[n-1], n-1);
}
void pr(int n){
    for(int i = 0;i < a[n];i++){
        for(int j = 0;j < a[n];j++)
            putchar(mp[n][i][j]);
        printf("
"
); } } int main(){ int n, m; while(scanf("%d", &n), n){ getchar(); for(int i = 0;i < n;i++) gets(mp[0][i]); a[0] = strlen(mp[0][0]); f[0] = a[0] * a[0]; scanf("%d", &m); for(int i = 1;i < m;i++){ a[i] = a[i-1] * a[0]; f[i] = a[i] * a[i]; } for(int k = 1;k < m;k++) for(int i = 0;i < a[k];i++){ for(int j = 0;j < a[k];j++) mp[k][i][j] = ' '; } dfs(m-1); pr(m-1); } return 0; }

남을 업신여기다.


어리석게 생각해 보니 일찍이 만났던 귀속해야 할 문제 ZOJ 3839, 이게 분형인 줄 알았어, 오, no!틀림없이 내가 눈이 멀었을 것이다. 분형의 생각에 따라 만들어진 큰 그림은 몇 개의 직사각형 블록이지 긴 선이 아니다.이거 수동으로 선을 그어야 돼!코드략, 혼자 놀자:)

좋은 웹페이지 즐겨찾기