CF1478-B. Nezzar and Lucky Number
CF1478-B. Nezzar and Lucky Number
题意:
题目给出一个数字\(d(1\leq d \leq 9)\)代表某个人最喜欢的数字。
题目定义了幸运数字,它的含义为:若一个数字的每个数位上至少出现一次这个人最喜欢的数字那么就称这个数字为幸运数字。例如这个人非常喜欢\(7\),那么\(711\)就是一个幸运数字,因为\(711\)的百位上有一个数字\(7\),而\(113\)就不是一个幸运数字,因为它的各个数位上都没有数字\(7\)。
题目任意给出一个数字\(a\),问你可不可以通过两个幸运数字的相加来得到它。
思路:
首先先假设\(d=7\),对于大于\(a=70\)的数字,比如\(71,75\)这些本身就是幸运数字,\(81,83,103\)这些数字虽然本身不是幸运数字,但是他们必然可以拆分成两个幸运数字相加的形式,举几个例子就能很好的说明:
若现在有个\(3\)个数字\(81,93,102\),那么\(81=(74-0)+(7+0)=74+7\),\(93=(86-10)+(7+10)=76+17\),\(102=(95-20)+(7+20)=75+27\),不止这些比较小的数字,再比如我随便打出来一个数字\(465387643875\),那么\((465387643875=465387643868-90)+(7+90)=465387643778+97\).
观察上面的式子,应该能看出规律了吧。对于任何大于\(80\)的数字,一开始设为\(7+X\),然后通过在\(X\)中减去一些数字(只减非个位上的数字)加到\(7\)上使得\(X\)的十位上也变成\(7\)。
解决了大于等于\(70\)的情况,现在就来看看小于70的情况。
在小于70的数字中,幸运数字只有\(7,17,27,37,47,57,67\),也就是说只有个位可能是\(7\),那么任意一个数字怎么判断能否由这些数字构成呢?由于这个\(a\)可能非常大,不可能通过暴力搜索的方法找到答案。
考虑这样一件事:在小于\(70\)的数字中,你要得到一个结尾为\(1\)的数字,需要几个\(7\) ?通过计算会发现需要\(3\)个\(7\)才能得到一个结尾为\(1\)的数字\(21\);那要得到一个结尾为\(6\)的数字呢?需要\(8\)个\(7\)。
有没有一些启发?如果现在有个数字是\(46\),那能否由上述的\(7\)个数字构成呢?不能,因为这些数字的个位都是\(7\),要得到个位为\(3\)的数字至少要\(8\)个\(7\)相加(这里说至少是因为你可以8个17相加,你可以3个27和5个47相加随你,但这里只说最终相加结果中最小的)也就是\(56\),而\(46<56\)无论如何都不可能由上述\(7\)个数字相加得到\(46\)。
那么大于等于\(56\)的、个位是\(6\)的数字可以有上述\(7\)个数字构成吗?可以的,比如\(66\),那\(66=7+7+7+7+7+7+17\)得到,只要灵活的在十位上加减数字就可以。
但这里有一些特殊情况,比如\(d=2\)的时候,\(2\)乘以任何数字都不可能得到一个奇数,也就是说如果给定的数字\(a\)的个位如果是奇数并且还小于\(20\)(对于大于\(20\)的情况,上述结论依然成立),那么他无论如何也不可能通过幸运数字相加得到\(a\)。
通过上面论述可以得到这样的结论:如果给定的数字\(a\)的个位数等于\(d*k\%10(k>0)\),\(k\)是可能的数字中最小的一个,并且\(a>=d*k\),那么\(a\)就可以由幸运数字相加得到。
以上仅仅作为演示,相关结论在其他的\(d\)以及\(a\)上依然适用。
AC代码
#include <cstdio>
#include <cstring>
#include <iostream>
int a[15];
void solve() {
memset(a, -1, sizeof a);
int q, d, t;
scanf("%d %d", &q, &d);
for (int i = 1; i < 10; i++) {
t = (d * i % 10);
if (a[t] == -1) {
a[t] = d * i;
}
}
for (int i = 0; i < q; i++) {
scanf("%d", &t);
bool flag = false;
if (t >= 10 * d) {
flag = true;
} else if (a[t % 10] != -1 && t >= a[t % 10]) {
flag = true;
}
printf("%s\n", flag ? "YES" : "NO");
}
}
int main() {
int T;
scanf("%d", &T);
while (T--) {
solve();
}
return 0;
}
CF1478-B. Nezzar and Lucky Number的更多相关文章
- 枚举 + 进制转换 --- hdu 4937 Lucky Number
Lucky Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- SCU3502 The Almost Lucky Number
Description A lucky number is a number whose decimal representation contains only the digits \(4\) a ...
- HDOJ 4937 Lucky Number
当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...
- 题目1380:lucky number
转载请注明文本链接 http://blog.csdn.net/yangnanhai93/article/details/40441709 题目链接地址:http://ac.jobdu.com/prob ...
- HDU 3346 Lucky Number
水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...
- 九度oj 题目1380:lucky number
题目描述: 每个人有自己的lucky number,小A也一样.不过他的lucky number定义不一样.他认为一个序列中某些数出现的次数为n的话,都是他的lucky number.但是,现在这个序 ...
- 『NYIST』第九届河南省ACM竞赛队伍选拔赛[正式赛二]- Nearly Lucky Number(Codeforces Beta Round #84 (Div. 2 Only)A. Nearly)
A. Nearly Lucky Number time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- ZOJ 3233 Lucky Number
Lucky Number Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...
- B - Nearly Lucky Number
Problem description Petya loves lucky numbers. We all know that lucky numbers are the positive integ ...
随机推荐
- explain select * from xuehao;
mysql> explain select * from xuehao;+----+-------------+--------+------+---------------+------+-- ...
- 使用msys2在window下构建和使用Linux的软件
目录 前言 安装 使用 总结 前言 在window下构建Linux编译环境是很常见的,以前用过mingw弄过差不多的环境. 但是使用msys2后就根本停不下来咯,太好用咯. 安装 去官网下载吧,安装跟 ...
- 【ORA】ORA-00257 archiver error. 错误的处理方法
今天连接数据库,结果报错,ora-00257查看 [oracle@exam oracle]$ oerr ora 00257 00257, 00000, "archiver error. Co ...
- Java编程开发之浅析Java引用机制
对于一个Java的对象而言,存储主要分为两种,一种是内存堆(Heap),内存堆是无序的,主要用来存放创建的Java对象:一种是内存栈(Stack),主要用来存放Java引用,然后在管理过程使用Java ...
- kafka(三)原理剖析
一.生产者消息分区机制原理剖析 在使用Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如很多公司使用 Kafka 收集应用服务器的日志数据,这种数据都是很多的,特别是 ...
- 安装macosx10.13high serria
本教程所需资源下载链接: 链接:https://pan.baidu.com/s/1wGTezXz6zGvtlwpv6mMoSg 提取码:r6n9 安装VMware workstation 16.0,安 ...
- Django-http协议
Http协议:超文本传输协议(应用层程序).它是客户端和服务端请求和应答的标准.Http的请求响应模型:1.客户端连接到web服务器一个http客户端,与web服务器的http端口(默认是80)建立了 ...
- chain issues incorrect order,EXtra certs,Contains anchor
背景: 下载颁发下来的ssl证书安装好之后网站正常显示安全,但是通过ssl证书网站去检测报错误:chain issues incorrect order,EXtra certs,Contains an ...
- etcd 性能优化实践
https://mp.weixin.qq.com/s/lD2b-DZyvRJ3qWqmlvHpxg 从零开始入门 K8s | etcd 性能优化实践 原创 陈星宇 阿里巴巴云原生 2019-12-16 ...
- 【LinuxShell】wget 命令详解
参数 待补充 返回值 code means 0 No problems occurred 1 Generic error code 2 Parse error - for instance ...