2018ICPC青島重現賽M
阿新 • • 發佈:2018-11-11
簽到題
定義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;
}