fxtoi 矩阵乘法
这个东西显然不能矩阵乘法(暴论)
考虑手推几组数据。
比如这组:
1
999 100000000000000
这东西怎么推啊,这不是要死人的节奏吗。
别急,推推看就知道了。
\(f_0=999\)
\(f_1=999+9\times 9=1080\)
\(f_2=1080+0\times 8=1080\)
你发现了什么?
当这个数位中出现\(0\)时就一定能无限循环。
然后你猜了结论交上去发现你切掉了。
这里来伪证一下复杂度。
一定会到一种时候\(*************9**\)
因为每次加最多\(9\times9=81\)
所以一定会加成这样\(*************0**\)
然后就可以跳出了。
而怎么样才能到达这种局面呢?
每隔\(900\)个数就会到达,就算每次加的都是\(1\),那么每组数据只要\(900\)次,而实际是不可能每次加\(1\)的,所以跑过\(5\times 10^4\)的数据是绝对可以的。
所以这道题实际上在教你做题,让你一定不要忘记手推小样例。而一般给你的样例都是精心构造的(暴论)。比如这道题,根本没有给出这一种情况。
代码实现:
#include<cstdio>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
using namespace std;
int t,maxn,minn;
long long n,k,now;
int main(){
// freopen("matrix10.in","r",stdin);
// freopen("matrix10.out","w",stdout);
scanf("%d",&t);
while(t--){
scanf("%lld%lld",&n,&k);
while(k--){
now=n;minn=1e9;maxn=0;
while(now) minn=min(minn,now%10),maxn=max(maxn,now%10),now=now/10;
if(!minn) break;
n+=minn*maxn;
}
printf("%lld\n",n);
}
}