CF1478-B. Nezzar and Lucky Number

CF1478-B. Nezzar and Lucky Number

题意:

题目给出一个数字 d ( 1 ≤ d ≤ 9 ) d(1\leq d \leq 9) d(1d9)代表某个人最喜欢的数字。

题目定义了幸运数字,它的含义为:若一个数字的每个数位上至少出现一次这个人最喜欢的数字那么就称这个数字为幸运数字。例如这个人非常喜欢 7 7 7,那么 711 711 711就是一个幸运数字,因为 711 711 711的百位上有一个数字 7 7 7,而 113 113 113就不是一个幸运数字,因为它的各个数位上都没有数字 7 7 7

题目任意给出一个数字 a a a,问你可不可以通过两个幸运数字的相加来得到它。


思路:

首先先假设 d = 7 d=7 d=7,对于大于 a = 70 a=70 a=70的数字,比如 71 , 75 71,75 71,75这些本身就是幸运数字, 81 , 83 , 103 81,83,103 8183103这些数字虽然本身不是幸运数字,但是他们必然可以拆分成两个幸运数字相加的形式,举几个例子就能很好的说明:

若现在有个 3 3 3个数字 81 , 93 , 102 81,93,102 8193102,那么 81 = ( 74 − 0 ) + ( 7 + 0 ) = 74 + 7 81=(74-0)+(7+0)=74+7 81=(740)+(7+0)=74+7 93 = ( 86 − 10 ) + ( 7 + 10 ) = 76 + 17 93=(86-10)+(7+10)=76+17 93=(8610)+(7+10)=76+17 102 = ( 95 − 20 ) + ( 7 + 20 ) = 75 + 27 102=(95-20)+(7+20)=75+27 102=(9520)+(7+20)=75+27,不止这些比较小的数字,再比如我随便打出来一个数字 465387643875 465387643875 465387643875,那么 ( 465387643875 = 465387643868 − 90 ) + ( 7 + 90 ) = 465387643778 + 97 (465387643875=465387643868-90)+(7+90)=465387643778+97 (465387643875=46538764386890)+(7+90)=465387643778+97.

观察上面的式子,应该能看出规律了吧。对于任何大于 80 80 80的数字,一开始设为 7 + X 7+X 7+X,然后通过在 X X X中减去一些数字(只减非个位上的数字)加到 7 7 7上使得 X X X的十位上也变成 7 7 7

解决了大于等于 70 70 70的情况,现在就来看看小于70的情况。

在小于70的数字中,幸运数字只有 7 , 17 , 27 , 37 , 47 , 57 , 67 7,17,27,37,47,57,67 7,17,27,37,47,57,67,也就是说只有个位可能是 7 7 7,那么任意一个数字怎么判断能否由这些数字构成呢?由于这个 a a a可能非常大,不可能通过暴力搜索的方法找到答案。

考虑这样一件事:在小于 70 70 70的数字中,你要得到一个结尾为 1 1 1的数字,需要几个 7 7 7 ?通过计算会发现需要 3 3 3 7 7 7才能得到一个结尾为 1 1 1的数字 21 21 21;那要得到一个结尾为 6 6 6的数字呢?需要 8 8 8 7 7 7

有没有一些启发?如果现在有个数字是 46 46 46,那能否由上述的 7 7 7个数字构成呢?不能,因为这些数字的个位都是 7 7 7,要得到个位为 3 3 3的数字至少要 8 8 8 7 7 7相加(这里说至少是因为你可以8个17相加,你可以3个27和5个47相加随你,但这里只说最终相加结果中最小的)也就是 56 56 56,而 46 < 56 46<56 46<56无论如何都不可能由上述 7 7 7个数字相加得到 46 46 46

那么大于等于 56 56 56的、个位是 6 6 6的数字可以有上述 7 7 7个数字构成吗?可以的,比如 66 66 66,那 66 = 7 + 7 + 7 + 7 + 7 + 7 + 17 66=7+7+7+7+7+7+17 66=7+7+7+7+7+7+17得到,只要灵活的在十位上加减数字就可以。

但这里有一些特殊情况,比如 d = 2 d=2 d=2的时候, 2 2 2乘以任何数字都不可能得到一个奇数,也就是说如果给定的数字 a a a的个位如果是奇数并且还小于 20 20 20(对于大于 20 20 20的情况,上述结论依然成立),那么他无论如何也不可能通过幸运数字相加得到 a a a

通过上面论述可以得到这样的结论:如果给定的数字 a a a的个位数等于 d ∗ k % 10 ( k > 0 ) d*k\%10(k>0) dk%10(k>0) k k k是可能的数字中最小的一个,并且 a > = d ∗ k a>=d*k a>=dk,那么 a a a就可以由幸运数字相加得到。

以上仅仅作为演示,相关结论在其他的 d d d以及 a a 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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当您尝试重新启动 isc-dhcp-server 服务时,如果出现“Job for isc-dhcp-server.service failed because the control process exited with error code”的错误消息,则表示 isc-dhcp-server 服务无法正常启动。要解决此问题,您可以执行以下步骤: 1. 检查 /etc/dhcp/dhcpd.conf 文件是否存在,并确保其格式正确。您可以使用以下命令检查配置文件: ``` sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf ``` 如果此命令返回任何错误,请修改配置文件并重新运行命令,直到不再出现错误。 2. 检查 /etc/default/isc-dhcp-server 文件中的变量是否正确设置。确保 DHCPDv4_CONF 和 DHCPDv6_CONF 变量中的接口名称正确,并且没有任何语法错误。 3. 确保您的服务器上没有其他 DHCP 服务器正在运行。如果您的服务器上已经运行了其他 DHCP 服务器,则 isc-dhcp-server 服务将无法启动。您可以使用以下命令停止其他 DHCP 服务器: ``` sudo systemctl stop dnsmasq.service ``` 然后再尝试启动 isc-dhcp-server 服务。 4. 检查系统日志以获取有关服务启动失败的更多详细信息。您可以使用以下命令查看服务的状态和日志: ``` sudo systemctl status isc-dhcp-server.service sudo journalctl -xeu isc-dhcp-server.service ``` 这将显示与 isc-dhcp-server 服务相关的所有系统日志条目,以帮助您进一步诊断问题。 通过执行上述步骤中的一个或多个,您应该能够解决 isc-dhcp-server 服务启动失败的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值