P8225 题解

· · 题解

这道题其实不难,主要是这个题目背景没点二次元或许还真的看不懂。好在题目描述给了简化版。

整理一下思路就会发现其实很简单:有一个所谓的“ k 进制天才数”,这个数简单来说就是 k 的倍数个 9 组成的数,这里我们可以简化 k 的倍数为 能被 k 个 9 整除的数 即可。

这样一来“能不能把 n 拆分成若干个 k 阶天才数的和。”这个问题就变成了 “ n 能不能被 k 个 9 整除。” 这样就简单了。

代码如下,细节见注释:

#include<bits/stdc++.h>
using namespace std;
int main(){
    int t;
    scanf("%d",&t);//输入t组
    for(int i=0;i<t;i++){
        long long n,k;
        scanf("%lld %lld",&k,&n);//每组给出k和n,注意顺序

        long long ktian=0,cnt=1;
        while(k){
            ktian+=(9*cnt);
            cnt*=10;
            k--;
        }//计算“k个9”

        if(n%ktian==0){
            printf("aya\n");
        }else{
            printf("baka\n");
        }//判断能不能被整除并输出
    }
    return 0;
}