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 ...
随机推荐
- show slave status常用参数备忘
mysql> show slave status\G*************************** 1. row *************************** Slave_IO ...
- VBScript调用winscp,实现sftp操作
最新有一个需求,需要在ssis中调用sftp下载文件,由于服务器上只有framework2.0,并且需要用sqlserver代理调用作业,限制了很多. 首先用的是脚本任务,进程调用winscp.com ...
- 对于Update Function Modules的一点说明
To be able to call a function module in an update work process, you must flag it in the Function Bui ...
- MYSQL基础知识的复习1
数据库(是存放数据的仓库) 1.根据存储量以及安全性上来划分: 大型数据库:DB2 Oracle(毕业) Hbase 银行 公安局(不加班 没网) 移动 中型数据库:mysql sqlserver(. ...
- ryu—流量监视
1. 代码解析 ryu/app/simple_monitor_13.py: from operator import attrgetter from ryu.app import simple_swi ...
- Netty之JAVA BIO模型
一.JAVA BIO模型 1.I/O模型 I/O 模型简单的理解:就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能 Java 共支持 3 种网络编程模型/IO 模式:BIO.NI ...
- 布隆过滤器 数据同步业务 :google-guava+spring-boot-api+mybatis, 缺失值全匹配查找
布隆过滤器 数据同步业务 :google-guava+spring-boot-api+mybatis, 缺失值全匹配查找
- ByteDance 2019 春招题目
牛客网字节跳动笔试真题:https://www.nowcoder.com/test/16516564/summary 分了 2 次做,磕磕碰碰才写完,弱鸡悲鸣. 1. 聪明的编辑 题目:Link . ...
- loj10006数列分段
题目描述 对于给定的一个长度为 N 的正整数数列 A,现要将其分成连续的若干段,并且每段和不超过 M(可以等于 M),问最少能将其分成多少段使得满足要求. 输入格式 第一行包含两个正整数 N,M表示了 ...
- Language Guide (proto3) | proto3 语言指南(四)枚举类型
枚举类型 定义消息类型时,可能希望其中一个字段只包含预定义值列表中的一个.例如,假设您想为每个SearchRequest添加一个corpus(语料库)字段,其中语料库的值可以是UNIVERSAL.WE ...