UVa11549计算器谜题[floyd判圈]

时间:2024-01-17 17:39:32

题意:

有个老式计算器,每次只能记住一个数字的前n位。现在输入一个整数k,然后反复平方,一直做下去,能得到的最大数是多少。例如,n=1,k=6,那么一次显示:6,3,9,1...


白书上的题

set,hash都占空间也不快

裸floyd判圈

洛谷U4984

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=;
inline ll read(){
char c=getchar();ll x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x;
}
ll n,k;
int buf[N];
int nxt(int n,ll k){
if(!k) return ;
ll tmp=(ll)k*k;
int L=;
while(tmp>) {buf[L++]=tmp%;tmp/=;}
if(n>L) n=L;
int ans=;
for(int i=;i<n;i++) ans=ans*+buf[--L];
return ans;
}
int main(){
n=read();k=read();
int k1=k,k2=k,ans=k;
do{
k1=nxt(n,k1);
k2=nxt(n,k2); ans=max(ans,k2);
k2=nxt(n,k2); ans=max(ans,k2);
}while(k1!=k2);
cout<<ans;
}