每行乙個整數n
輸出與之對應的m
201
202
/*
*檔名稱:test.cpp
*作 者:冷基棟
*完成日期:2023年2月13日
*版 本 號:v1.0
*/#include using namespace std;
int main()
else
if(c==1)
break;
m++;
}cout執行結果:
知識點總結:
關於這道題的做法,我這裡複製一下杭電的解題報告:
eddy's洗牌
原始演算法:
我們把每個數逛來逛去最後又回家的過程叫做乙個迴圈,迴圈中經過的位置個數叫做迴圈的長度。如n=4時,有 兩個迴圈:1-2-4-8-7-5-1,長度為6;3-6-3,長度為2。答案就是所有迴圈長度的最小公倍數。顯然演算法時空複雜度均為o(n)(因為需要記錄乙個數是否已被某個迴圈經過)。
高效演算法:
1所在的迴圈長度就是答案。時間複雜度小於o(n),空間複雜度為o(1),程式設計複雜度也遠低於原始演算法。這個演算法是建立在如下結論之上的:「1所在的迴圈長度是其它任一迴圈長度的倍數」,或者表述為「1回家時,其它任一數字也一定回了家」。
給出的證明:
題目中的移動規則,其實就是每次把在第x個位置的數移動到位置x*2 mod (2*n+1)。這個式子是十分巧妙的,請用心領悟。由這個式子可以得出任一數字x在p步之後的位置:x*2^p mod (2*n+1)。假設1經過p步回了家,那麼可得1*2^p mod (2*n+1)=1。由此可得對任一數字x,均有x*2^p mod (2*n+1)=x,即1回家時任一數字都回了家。
學習心得:
好好學習 天天向上
ACM杭電專題三1007
problem description 都說天上不會掉餡餅,但有一天gameboy正走在回家的小徑上,忽然天上掉下大把大把的餡餅。說來gameboy的人品實在是太好了,這餡餅別處都不掉,就掉落在他身旁的10公尺範圍內。餡餅如果掉在了地上當然就不能吃了,所以gameboy馬上卸下身上的揹包去接。但由於...
杭電acm專題三1011
有乙隻經過訓練的蜜蜂只能爬向右側相鄰的蜂房,不能反向爬行。請程式設計計算蜜蜂從蜂房a爬到蜂房b的可能路線數。其中,蜂房的結構如下所示。input 輸入資料的第一行是乙個整數n,表示測試例項的個數,然後是n 行資料,每行包含兩個整數a和b 0 output 對於每個測試例項,請輸出蜜蜂從蜂房a爬到蜂房...
杭電OJ 1210 Eddy s 洗牌問題
problem description input 每行乙個整數n output 輸出與之對應的m sample input 20 1 sample output 20 2 author eddy source 杭電acm省賽集訓隊選拔賽之熱身賽 recommend eddy 關於這道題的做法,我這...