洛谷 P8225 题解

题目传送门


题意:

定义一个十进制数为 k 阶天才数,并且需要满足:

  • 该整数的位数k 的倍数。

  • 每一个数位都是 9

t 次询问,每次询问给出 nk,求 n 是否可以拆分成若干个 k 阶天才数的和。


思路:

  • 题目求的是 n 是否可以被 k 阶天才数整除,我们可以用 n 取模 k 阶天才数。

  • 例如 k=3 时,999,999999... 这些数都是可以的,但是 n 只要可以被最小的 k 阶天才数整除,那么答案就是可以的。

  • 我们再看 k 的范围是 1k10,所以我们可以用打表的方式,将 10 个不同范围的 k 阶天才数存到数组里,每次询问分别取模就可以了,这样我们就可以做到每次询问都是 O(1) 的时间复杂度。


code:

#include <bits/stdc++.h>
using namespace std;

long long ans[15]={0,9,99,999,9999,99999,999999,9999999,99999999,999999999,9999999999};

inline long long read(){
	long long x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
	return x*f;
}

long long t,n,k,s;

int main(){
	t=read();
	while(t--){
		k=read();n=read();
		if(n%ans[k]==0)	cout<<"aya"<<endl;
		else cout<<"baka"<<endl;
	}
	return 0;
}


posted @   Black--Panda  阅读(66)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示