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的更多相关文章

  1. 枚举 + 进制转换 --- hdu 4937 Lucky Number

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)To ...

  2. SCU3502 The Almost Lucky Number

    Description A lucky number is a number whose decimal representation contains only the digits \(4\) a ...

  3. HDOJ 4937 Lucky Number

    当进制转换后所剩下的为数较少时(2位.3位),相应的base都比較大.能够用数学的方法计算出来. 预处理掉转换后位数为3位后,base就小于n的3次方了,能够暴力计算. . .. Lucky Numb ...

  4. 题目1380:lucky number

    转载请注明文本链接 http://blog.csdn.net/yangnanhai93/article/details/40441709 题目链接地址:http://ac.jobdu.com/prob ...

  5. HDU 3346 Lucky Number

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...

  6. 九度oj 题目1380:lucky number

    题目描述: 每个人有自己的lucky number,小A也一样.不过他的lucky number定义不一样.他认为一个序列中某些数出现的次数为n的话,都是他的lucky number.但是,现在这个序 ...

  7. 『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 ...

  8. ZOJ 3233 Lucky Number

    Lucky Number Time Limit: 5000ms Memory Limit: 32768KB This problem will be judged on ZJU. Original I ...

  9. B - Nearly Lucky Number

    Problem description Petya loves lucky numbers. We all know that lucky numbers are the positive integ ...

随机推荐

  1. 记汉化zabbix后图形界面没有任何汉字的问题

    1.安装并汉化后zabbix,所有的图形界面都没有任何字图,如下图 2.郁闷不已,去/var/www/html/zabbix/fonts目录下面查看,发现之前上传字体的文件名后缀是.ttc,猜着一般见 ...

  2. pymysql模块使用介绍

    pymysql ​ 我们要学的pymysql就是用来在python程序中如何操作mysql,本质上就是一个套接字客户端,只不过这个套接字客户端是在python程序中用的,既然是客户端套接字,应该怎么用 ...

  3. linux登陆欢迎信息及命令提示符修改

    登录信息修改 登陆信息显示数据 : /etc/issue and /etc/motd 登陆终端机的时候,会有几行提示的字符串,这些设置在/etc/issue里面可以修改,提示内容在/etc/motd中 ...

  4. Flutter--Flutter中Widget、App的生命周期

    前言 在App的开发过程中,我们通常都需要了解App以及各个页面的生命周期,方便我们在App进入前台时启动一些任务,在进入后台后暂停一些任务.同时,各个页面的生命周期也很重要,每个页面消失时要做一些内 ...

  5. Netty之Unpooled_Bytebuf

    前言 计算机存储基本单位是字节(byte),传输基本单位是bit(位),JAVA NIO提供了ByteBuffer等七种容器来提升传输时的效率,但是在使用时比较复杂,经常要进行读写切换,主要缺点如下: ...

  6. Tensorflow-各种优化器总结与比较

    优化器总结 机器学习中,有很多优化方法来试图寻找模型的最优解.比如神经网络中可以采取最基本的梯度下降法. 梯度下降法(Gradient Descent) 梯度下降法是最基本的一类优化器,目前主要分为三 ...

  7. 急~为啥我指定的的maven依赖版本没有生效?不是最短路径原则吗?

    女朋友他们项目用了 spring-boot,以 spring-boot-parent 作为 parent: <parent> <groupId>org.springframew ...

  8. Java三种IO模型和LinuxIO五种IO模型

    Java: https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/BIO-NIO-AIO.md https://github.co ...

  9. Android第一代壳demo编写

    Android第一代壳Demo编写 前言 这篇文章是对姜维大佬的这篇文章[Android中的Apk的加固(加壳)原理解析和实现]的补充.建议先看一编姜维大佬的这篇文章再看. 姜维大佬写那篇文章的时间距 ...

  10. 关于ckfinder上传文件添加自定义处理方案

    上篇博客中介绍了如何使用ckfinder中自定义按钮的功能,实现自定义上传的功能,但是却无法解决用户使用拖拽文件上传方式中添加自定义事件,今天我们来用另一种更简洁的方式来实现上传文件重名时做一些自定义 ...