POJ 2083 Fractal(經典遞迴)

2021-10-08 06:32:54 字數 2308 閱讀 6512

題目鏈結

比較經典的題,但是自己沒寫出來,有必要反思一下。圖案的遞迴其實比較容易的,關鍵是如何輸出空格,如果把空格當成另外的分塊,換行又沒辦法解決

其實這裡的處理方法很巧妙,先將最大範圍內填充空格,使用fil

l(

)fill()

fill()

,然後設dfs

(cur

,x,y

)dfs(cur,x,y)

dfs(cu

r,x,

y)代表當前巢狀層數為cur

curcu

r時,在左上角(x,

y)

(x,y)

(x,y

)生成分形圖,顯然遞迴邊界為cur

==

1cur==1

cur==1

,直接填充乙個x

xx,然後就是找右邊,中間,左下,右下的左上角的位置,然後搜尋即可

最後處理答案時為了防止多輸出空格,每行從右向左找到第乙個x

xx,然後它右邊設為』\0』,這樣也方便輸出

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

#define fi first

#define se second

#define pb push_back

#define ins insert

#define vector point

#define lowbit

(x)(x&

(-x)

)#define mkp

(x,y)

make_pair

(x,y)

#define mem

(a,x)

memset

(a,x,sizeof a)

;typedef long

long ll;

typedef long

double ld;

typedef unsigned long

long ull;

typedef pair<

int,

int>

pii;

typedef pair<

double

,double

>

pdd;

const

double eps=

1e-8

;const

double pi=

acos(-

1.0)

;const

int inf=

0x3f3f3f3f

;const

double dinf=

1e300

;const ll inf=

1e18

;const

int mod=

1e9+7;

const

int maxn=

2e5+10;

char s[

1005][

1005];

intqkp

(int x,

int n)

return ans;

}void

dfs(

int cur,

int x,

int y)

int d=

qkp(

3,cur-2)

;dfs

(cur-

1,x,y)

;dfs

(cur-

1,x,y+

2*d)

;dfs

(cur-

1,x+d,y+d)

;dfs

(cur-

1,x+

2*d,y)

;dfs

(cur-

1,x+

2*d,y+

2*d);}

intmain()

}for

(int i=

1;i<=m;i++

)printf

("%s\n"

,s[i]+1

);printf

("-\n");

}return0;

}

POJ2083 Fractal 分形,分治

圖形 一級 x x 二級 x x role presentation xxx xx x x xx xxx xx xx x x x x xxx xx x xxx x xx x x x xxx xx x x x x xxx x然後以此類推 我們可以發現每一級的左上角和上一級一樣,所以可以用乙個遞迴處理好...

bzoj 2083 (二分查詢)

time limit 10 sec memory limit 259 mb submit 352 solved 157 submit status discuss 霸中智力測試機構的一項工作就是按照一定的規則刪除乙個序列的數字,得到乙個確定的數列。lyx很渴望成為霸中智力測試機構的主管,但是他在這個...

p2083 noip2013T4 積木大賽

春春幼兒園舉辦了一年一度的 積木大賽 今年比賽的內容是搭建一座寬度為n的大 廈,大廈可以看成由n塊寬度為1的積木組成,第n塊積木的最終高度需要是 i,在搭建開始之前,沒有任何積木 可以看成n塊高度為 0 的積木 接下來每次操作,小朋友們可以選擇一段連續區間 l,r 然後將第l塊到第r塊之間 含第 l...