nyoj 52 無聊的小明 Floyd判圈法)

2021-09-22 02:09:34 字數 884 閱讀 1852

這幾天無意中看到的floyd判圈法實在是好用,用於判斷在於給定規則下是否會出現迴圈,這題是判斷是否是按週期出現的,如果還不了解差別看下面的例子

10 3

分別是 10 100 0 0 0~~

這種就不是週期出現的。

再來說說這種演算法吧,在時間複雜度上是差不多的,但是亮點在於空間複雜度o(1);怎麼實現的呢?

我們先想像乙個圓形的跑道,有兩個人從同一起點開始跑,但是第二個人的速度是第乙個人的兩倍。那麼如果有環會出現什麼結果呢?第乙個人跑完一圈的時侯第二個人恰好和它在同一水平線上,簡單是說就是相遇(速度是兩倍呀)

那具體怎麼實現呢,首先我們把變換的規則封裝成乙個函式,定義兩個變數n1,n2,讓他們都等於初值,然後嘞?速度是兩倍怎麼實現呢???思考一下再來看看下面的**吧;

#includeusing namespace std;

#define fio ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

#define _for(n,m,i) for (int i = (n); i < (m); i++)

#define _rep(n,m,i) for (int i = (n); i <= (m); i++)

typedef long long ll;

ll mod, n;

ll next(ll x)

int main() while(n1 != n2);

if(n1 == ans) cout << num << endl;//判讀是否是週期只需要看看結束點是不是在「起點」

else cout << -1 << endl;

}}

NYOJ 52 無聊的小明 模擬

時間限制 3000 ms 記憶體限制 65535 kb 難度 3 描述 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到乙個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,2,4,8,6 我們說2的正整數次冪最後一位的迴...

nyoj 52 無聊的小明 模擬, SET

記憶體限制 64mb 時間限制 3000ms special judge no accepted 1 submit 3 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到乙個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,...

nyoj 52 無聊的小明 模擬, SET

記憶體限制 64mb 時間限制 3000ms special judge no accepted 1 submit 3 這天小明十分無聊,沒有事做,但不甘於無聊的小明聰明的想到乙個解決無聊的辦法,因為他突然對數的正整數次冪產生了興趣。眾所周知,2的正整數次冪最後一位數總是不斷的在重複2,4,8,6,...