签到题
定义f(x)就是x这个数(0-9)含有的圈的个数,然后再定义函数g(x),0次的时候就是x,然后每加一次幂就是f(x)一次
1e9想想应该可以直接暴力循环,第一次tle,然后仔细一想到最后其实很多都是0-1-0-1这样变化的,真正有效的变化只有前面几个,所以循环到g(x)值为0就可以判断然后break了
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int t;
ll x,k;
int f[10]={
1,0,0,0,1,0,1,0,2,1};
int main(void){
scanf("%d",&t);
while(t--){
scanf("%lld%lld",&x,&k);
ll ans=x;
for(int i=1;i<=k;i++){
ll t=0;
if(ans==0){
t+=f[0];
}else{
while(ans){
t+=f[ans%10];
ans/=10;
}
}
if(t==0){
if((k-i)%2){
ans=1;
}else{
ans=0;
}
break;
}
ans=t;
}
printf("%lld\n",ans);
}
return 0;
}