AHOI2012 樹屋階梯

2022-06-06 22:24:21 字數 1748 閱讀 3318

有無窮多的任意尺寸矩形,搭建乙個 \(n\) 級正階梯有多少種方案?

任意大小為 \(i\) 的階梯,都可以由左上角放一塊大小為 \(j\) 的,右下角放一塊大小為 \(i-j-1\) 的來構成,每一塊內部遞迴填充,對應 catalan 數

實現需要高精乘單精,高精除單精

#include using namespace std;

const int maxlen = 1005;

class gint

gint(int inte)

gint(const char *str)

friend ostream &operator<<(ostream &cout, const gint &x);

gint operator=(int inte);

gint operator=(const char *str);

gint operator=(const gint &b);

gint operator*(const gint &b);

gint operator+(const gint &b);

gint operator-(const gint &b);

gint operator/(const gint &b);

//gint operator%(const gint &b);

//bool operator<(const gint &b);

//bool operator>(const gint &b);

int compare(const gint &b);

};ostream &operator<<(ostream &cout, const gint &x)

gint gint::operator=(const char *str)

gint gint::operator=(int inte)

for (len = 0; inte > 0;)

return *this;

}gint gint::operator=(const gint &b)

int gint::compare(const gint &y)

gint gint::operator*(const gint &b)

while (c.s[i])

while (i > 1 && !c.s[i]) i--;

c.len = i;

return c;

}gint gint::operator/(const gint &b)

d.s[1] = s[i];

c.s[i] = 0;

while ((j = d.compare(b)) >= 0)

}c.len = len;

while ((c.len > 1) && (c.s[c.len] == 0)) c.len--;

return c;

}gint gint::operator+(const gint &b)

c.len = i - 1;

if (c.len == 0)

c.len = 1;

return c;

}gint gint::operator-(const gint &b) else

j = 0;

}c.len = len;

while (c.len > 1 && !c.s[c.len]) c.len--;

return c;

}signed main()

AHOI2012 樹屋階梯

卡特蘭數!至於為什麼是卡特蘭數,就稍微說那麼一兩句吧 對於乙個高度為 i 的階梯,我們可以在左上角填乙個高度為 k 的階梯,右下角填乙個高度為 i 1 k 的階梯剩下的我們用乙個大的長方形填上就可以啦 比如這個樣子 之後還需要高精,但是為了簡單好寫,這裡可以分解質因數,之後就變成另乙個單精度乘高精了...

AHOI2012 樹屋階梯 題解(卡特蘭數)

暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的樹屋露營。小龍分配的樹屋建立在一顆高度為n 1尺 n為正整數 的大樹上,正當他發愁怎麼爬上去的時候,發現旁邊堆滿了一些空心四方鋼材 如圖1.1 經過觀察和測量,這些...

2822 AHOI2012 樹屋階梯

time limit 1 sec memory limit 128 mb submit 729 solved 424 submit status discuss 暑假期間,小龍報名了乙個模擬野外生存作戰訓練班來鍛鍊體魄,訓練的第 乙個晚上,教官就給他們出了個難題。由於地上露營濕氣重,必須選擇在高處的...