CF1526B I Hate 1111--数学性质推不出来?打表就好啦
题意:
给定一个n,他是否能被 11,111,1111,.......这样的数表示呢
样例:33=3*11,144=111+11*3
解:
首先可以发现的是:1111=1100+11=11*101,11111=11100+11=111*10+11,后面的不难验证都可以由11,111表示
问题缩小了,也就是n能不能被11,111表示
也就是解方程:11x+111y=n,有非负整数解
首先由于gcd(11,111)=1,此方程一定有解,但不一定是非负解
结论是:当不定方程:ax+by=n,gcd(a,b)=1,且n>ab-a-b时,有非负解
也就是当n>11*111-11-111=1099时,都可以被表示
但比赛时想不到怎么办?我的评价是:打表。
可以发现,从n=1100开始,以后的数都可以被表示。大胆猜测n>=1100不用判断
此时,只需要暴力求解n<1100的所有n是否被表示即可
这个范围是非常小的。
#include<iostream> #include<cstring> using namespace std; typedef long long ll; const int maxn = 0x3f3f3f; ll f[maxn]; int main() { for (ll x = 0; x <= 100; x++) { for (ll y = 0; y <= 100; y++) { ll ans = 11 * x + 111 * y; if(ans<maxn)f[ans] = 1; } } int t; cin >> t; while(t--) { int n; cin >> n; if (n >= 1100) { cout << "YES\n"; continue; } else { if (f[n])cout << "YES\n"; else cout << "NO\n"; } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· Windows编程----内核对象竟然如此简单?