題意:
給乙個整數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...