漢諾塔問題
本題將古老問題做了點改動,每乙個圓盤有相同的兩個,但是實際上這兩個圓盤必須同時移動,所以只需要將最終步驟乘2即可。
自己推導了一下這個問題。
首先可知,要想把處於最下層的盤x移動到c柱,必須把其上的盤集合q移動到b柱。
這是第一層劃分:將x之上的盤集合q移動到b柱,然後將盤x移動到c柱,然後將q從b柱移動到c柱。
又可知,將q移動到b柱和將q移動到c柱實際上所需最小步驟是相同的,記作fq
至於為什麼步驟相同,可由這樣的對稱關係解釋:在將a上的盤集合q移動到b或c的過程開始之前,b或c是完全對稱的,或者說是無法區分的。
這樣可得到答案fq+1+fq,也就得到了遞推關係式,最後快速冪取模乘2即可。
#include
using
namespace
std;
typedef
long
long ll;
int p=2097151;
long
long n;
ll quick_mod(ll a, ll b)
b >>= 1;
a = a * a % p;
}return ans;
}int main()
}
1200 又見菱形
題目描述 acmer感覺到上次的列印菱形的那道題非常經典,經過幾天的反覆思考,終於弄明白了那道題的來龍去脈。為了鞏固大家的掌握情況,下面他出了一道題加強版的列印菱形來考考大家是否真正掌握了這個知識點!那麼,你會做嗎?樣例輸入 3樣例輸出 提示樣例中間一行是9個星號 挨著的星號重合 黃慶浩 inclu...
1200 最小絕對差
給你個整數陣列 arr,其中每個元素都 不相同。請你找到所有具有最小絕對差的元素對,並且按公升序的順序返回。示例 1 輸入 arr 4,2,1,3 輸出 1,2 2,3 3,4 示例 2 輸入 arr 1,3,6,10,15 輸出 1,3 示例 3 輸入 arr 3,8,10,23,19,4,14,...
1200 最小絕對差
題目描述 給你個整數陣列 arr,其中每個元素都 不相同。請你找到所有具有最小絕對差的元素對,並且按公升序的順序返回。示例 1 輸入 arr 4,2,1,3 輸出 1,2 2,3 3,4 示例 2 輸入 arr 1,3,6,10,15 輸出 1,3 示例 3 輸入 arr 3,8,10,23,19,...