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. 【EXP】Oracle多表导出问题

    有些时候,需要导入某个用户的一些相关表.但是不知道用户的用户名和密码.这样就很尴尬 但是如果手上有dba权限的用户的话,就很方便的能导出了 先要知道多表导出的语句 exp system/123456 ...

  2. 爬虫学习(二)requests模块的使用

    一.requests的概述 requests模块是用于发送网络请求,返回响应数据.底层实现是urllib,而且简单易用,在python2.python3中通用,能够自动帮助我们解压(gzip压缩的等) ...

  3. es6语法详解

    什么是ECMAScript? ECMAScript是浏览器脚本语言的规范,而我们熟知的js语言,如JavaScript则是规范的具体实现.es6就好比Java的jdk. 一.es6语法详解:let声明 ...

  4. UI测试框架

    1. 从上到下共分成4层: 用例层  组件管理层  元素管理层  公共数据层 2. 用例层: 将每条用例使用参数化, 公共参数存储到"公共数据层", 中间参数通过组件层传递 3. ...

  5. C++ /Python 将视频中的片段转为图片

      配置OpenCV :项目名称->右击->属性 VC++目录 包含目录 放 ...\build\include ...\build\include\opencv   ...\build\ ...

  6. Django Full Coverage

    Django(个人推荐, 如果项目较大 需要协同开发, 建议使用django这种重量级框架, 如果类似于纯api的后端应用建议使用 flask, 轻量小巧 , 麻雀虽小五脏俱全) 1.Django是什 ...

  7. CentOS安装mysql、JDK、Tomcat部署环境

    1.1. 安装mysql-5.6 1.1.1. 检测系统内部有没有安装其他的mysql数据库 $ rpm -qa | grep mysql 1.1.2. 如果内部有需要先删除Mysql $ yum r ...

  8. hook笔记②

  9. TCP 延迟

    https://mp.weixin.qq.com/s/fKWJrDNSAZjLsyobolIQKw 直击案发现场!TCP 10倍延迟的真相是? 原创 蛰剑 阿里技术 2019-11-01      

  10. Linux下编译安装源码包软件 configure ,make, make install, make test/check, make clean 假目标

    http://www.360doc7.net/wxarticlenew/541275971.html 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 ...