UVA 11549 floyd判圈演算法

2022-09-17 22:06:12 字數 1317 閱讀 3087

題意:

給乙個整數k,每次平方後只能顯示結果的前n位,問在這個過程中能得到的最大的數是多少;

思路:floyd判圈演算法;它的正確性建立在這得到的這些數是有限的,所以一定是乙個迴圈,在這個迴圈的圈裡面,乙個快乙個慢,同時出發最後一定會再次相遇,此時結束;

在這個過程中得到最大值;

ac**:

#include /*

#include #include #include #include #include #include #include #include

*/using

namespace

std;

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

#define riep(n) for(int i=1;i<=n;i++)

#define riop(n) for(int i=0;i#define rjep(n) for(int j=1;j<=n;j++)

#define rjop(n) for(int j=0;j#define mst(ss,b) memset(ss,b,sizeof(ss));typedef

long

long

ll;template

void read(t&num)

int stk[70

], tp;

template

inline void

print(t p)

while(p) stk[++ tp] = p%10, p/=10

;

while(tp) putchar(stk[tp--] + '0'

); putchar('\n

');}const ll mod=1e9+7

;const

double pi=acos(-1.0

);const ll inf=1e18;

const

int n=1e5+10

;const

int maxn=1005

;const

double eps=1e-10

;ll n;

ll k;

int a[30

],cnt;

ll getnext(ll x)

ll s=0

;

for(int i=cnt;i>cnt-n&&i>0;i--)

returns;}

intmain()

cout

<"\n"

; }

return0;

}

UVA 11549 計算器謎題(floyd判圈)

題目 可以想成兩個小孩,乙個小孩去追另乙個小孩,這個小孩是那個小孩的幾倍速度都沒有關係,若跑著跑著突然出現了乙個迴圈圈,那麼快的小孩一定可以套慢的小孩的圈,直到某一刻追上。此方法可以省去stl中的set,使得空間開銷變小。includeusing namespace std int buf 100 ...

Floyd判圈演算法

參考 判斷鍊錶中是否有環 大概就是說兩個指標首先都指向鍊錶的首部,然後乙個每次走一步,乙個每次走兩步,如果有環,那麼慢的肯定能夠追上快的,否則快的就會先到達終點。求環的長度 兩個指標重合時,快的停止,慢的每次走一步,計算圈的長度。求環的起點 if head null slowptr slowptr ...

floyd判圈演算法

floyd判圈演算法又稱龜兔賽跑演算法 兩個指標 p1,p2 p1 每次向後跳一次 p2 每次向後跳兩次 顯然,如果 p1,p2 相遇才有環 現在我們想求環長和環的起點.設起點到環的距離為 len 環的起點離相遇點距離 rem 設兩個指標分別走了 p,q 步 那麼,p len rem a l,q l...