Files
python/TangDou/CSP-J/J2-2024/stricks.txt
HuangHai 1f397eca87 'commit'
2025-08-30 18:35:01 +08:00

47 lines
1.7 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
0~9每个数字的,比如数字0有6个小木棍组成
int b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
int a[10] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
1、看了一眼数据范围,最大1e5,所以,双重循环的O(N^2)肯定是要挂掉的。
2、观察一下上面的a数组,发现
{2:1}
{3:7}
{4:4}
{5:2,3,5}
{6:0,6,9}
{7:8}
有啥规律呢?我们发现,如果现在需要处理掉5个小木棍,我肯定会贪心的选择2这个数字,而不会去使用3或者5,因为不管怎么样,2可以保证更小的结果。
但6的话需要讨论一下:
(1)非前导零时,选择0
(2)前导零时,选择6,9肯定没用,因为6永远比9划算。所以整理上面的数字规律如下:
{2:1}
{3:7}
{4:4}
{5:2}
{6:0,6}
{7:8}
下面我们找第一个测试用例尝试一下,看看能不能找出什么规律,这时,不要找太极端的数字,即不是最大的,也不是最小的
比如2,输出:1
比如3,输出:7
比如6,输出:6
比如18,输出208
通过6根数,我们为什么没有输出0呢?是因为题目说了,不能有前导零,所以在代码中应该有一个关键词 prefix_zero,用来判断是否是前导零。
那18输出208是怎么回事呢?
2-->5
0-->6
8-->7
5+6+7=18根木棍
6!=6*5*4*3*2*1=720
720*1e5=7.2e7 < 1e8,所以做一个 6!次运算是没有问题的,也就是说,这是一道dfs题
*/
// 数字0:6根木棍
// 数字1:2个木棍
// 数字2:5根木棍
// 数字4:4根木棍
// 数字7:2根木棍
// 数字8:7根木棍