这个题需要用set进行判重,如果开数组果断会超时,因为初始化,受教了
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<set>
using namespace std;
int next(int n,int x)
{
if(!x)
return 0;
long long ita=(long long)x*x;
int num[20],cou=0;
while(ita>0)
{
num[cou++]=ita%10;
ita/=10;
}
if(n>cou)
n=cou;
int ans=0;
for(int i=0;i<n;i++)
ans=ans*10+num[--cou];
return ans;
}
int main()
{
int cas,n,k;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&k);
set<int> s;
int ans=k;
while(!s.count(k))
{
s.insert(k);
k=next(n,k);
ans=max(ans,k);
}
printf("%d\n",ans);
}
return 0;
}