這幾天無意中看到的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,...