uva 11549 Calculator Conundrum
程序员文章站
2022-04-17 21:29:00
...
思路:模拟+hash。
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>
#include <deque>
#include <set>
#include <cstring>
#include <map>
#include <cmath>
using namespace std;
#define Mod 1000003
int head[Mod+5],nxt[Mod+5],t[Mod+5];
int ans=0;
int cnt=0;
bool find(long long k) {
int x=k%Mod;
int u=head[x];
if(u==-1) return false;
while(~nxt[u]) {
u=nxt[u];
if(t[u]==k) return true;
}
return false;
}
void add(long long k) {
int x=k%Mod;
int u=head[x];
if(u==-1) {head[x]=++cnt,t[cnt]=k;return ;
}
while(~nxt[u]) {
u=nxt[u];
}
nxt[u]=++cnt;
t[cnt]=k;
return ;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
int n;
long long k;
ans=0;
memset(head,-1,sizeof(head));
memset(nxt,-1,sizeof(nxt));
cnt=0;
scanf("%d%lld",&n,&k);
int a=1;
while(n--) a*=10;
while(!find(k)) {
add(k);
ans=max(ans,(int)k);
k=k*k;
while(k>=a){
k/=10;
}
}
printf("%d\n",ans);
}
return 0;
}
上一篇: 职场笑段,揭开那层虚伪的面纱!
下一篇: 大半夜复习要笑死我