作者SocketAM2 (AM2)
看板puzzle
标题Re: [中译] Puzzleup 2012 (19) Palindromic Number
时间Sat Dec 1 15:21:45 2012
我先自首,
1. 在这个版学到program-up这个字
2. 这题我分析了一下没突破口後就先program-up了
3. 看到j大的文,先是在心里按了个赞着实感叹了一下,然後噗哧
====================== 以上废话,以下尝试用分析的方式解这题 =================
令答案所需要的最大回文数为N
1. N < 9 * 83 * 741 * 6520 = 3608996040 (最多为十位数)
上面选定开头的9876後,小的会被後面的百位数拉高比例较多所以9是个位
剩下的543210优先把大的放在最重要的位数,依第几位数开头小的优先
2. 以下假设N为10位数
(1) N最前後两端的位数可能为1, 2, 3 (注意回文数的最高位数 = 最低位数)
a. 若四个结尾有偶数 => N的开头结尾只能是2
b. 若四个结尾有0 => 不可能是十位回文数 (个位数为零)
c. 若四个结尾有5 => 不可能是十位回文数 (搭偶数如b, 不搭偶数前後会是5)
d. 若结尾是1,3,7,9 => 不可能是十位回文数 (开头结尾会是9)
所以N为十位数,N的前後两端位数一定要是2
(2) 十位回文数一定是11的倍数,
且这一定是从百位数来(1位的显然不可能,偶位数的11倍数是回文一定重复)
百位数中,每个位数不重复、後两位没用到9,开头是3~9,结尾不是0或5有:
308, 341, 352, 374
407, 418, 451, 462, 473
506, 517, 528, 561, 572, 583
627, 638 ,671 ,682
704, 726, 748, 781
803, 814, 836, 847
902, 913, 924, 946, 957, 968
(3) 海巡开头可能的四个数字,检查[个位数;{结尾}](结尾0,5都拿掉)
a. {9,8,7,6} => min = 6 * 72 * 814 * 9035 = 3177139680 出局
b. {9,8,7,5} => min = 5 * 72 * 814 * 9036 = 2647909440
结尾{1,2,3,4,6}取三依乘积分类:
2: {1,2,6}, {1,3,4}, {3,4,6}
4: {1,4,6}, {2,3,4} --> 配个位数"8"
6: {1,2,3}, {2,3,6} --> 配个位数"7"
8: {1,2,4}, {1,3,6}, {2,4,6} --> 配个位数"9"
(a) 个位数为8,其他配{1,4,6}结尾,依三位数可能选择做分类(用过数字排除)
[8,XY,924,XZZY], X:{5,7}, Y:{1,6}, Z:{0,3}
[8,XY,704,XZZY], X:{5,9}, Y:{1,6}, Z:{2,3}
[8,XY,726,XZZY], X:{5,9}, Y:{1,4}, Z:{0,3}
[8,XY,506,XZZY], X:{7,9}, Y:{1,4}, Z:{2,3}
(b) 个位数为8,其他配{2,3,4}结尾
[8,XY,902,XZZY], X:{5,7}, Y:{3,4}, Z:{1,6}
[8,XY,913,XZZY], X:{5,7}, Y:{2,4}, Z:{0,6}
[8,XY,704,XZZY], X:{5,9}, Y:{2,3}, Z:{1,6}
(c) 个位数为7,其他配{1,2,3}结尾 (略)
(d) {2,3,6}
(e) 9 {1,2,4}
(f) {1,3,6}
(g) {2,4,6}
由以上(a)~(g)乘开可知,没有回文数
c. {9,8,7,4} => max = 9 * 83 * 751 * 4620 = 2591806140
结尾{1,2,3,6}取三依乘积分类:
2: {1,2,6}
6: {1,2,3}, {2,3,6} --> 配个位数"7"
8: {1,3,6} --> 配个位数"9"或"4"
d. {9,8,7,3} => max = 9 * 84 * 751 * 3620 = 2055276720
结尾{1,2,4,6}取三依乘积分类:
2: {1,2,6}
4: {1,4,6} --> 配个位数"8"或"3"(3太小)
8: {1,2,4}, {2,4,6} --> 配个位数"9"
e. {9,8,7,2} => max = 9 * 84 * 751 * 2630 = 1493198280 出局
f. {9,8,6,5} => max = 9 * 83 * 641 * 5720 = 2738890440
结尾{1,2,3,4,7}取三依乘积分类:
1: {1,3,7}
2: {1,3,4}, {2,3,7} --> 配个位数"6"
4: {1,2,7}, {2,3,4} --> 配个位数"8"
6: {1,2,3}, {2,4,7}
8: {1,2,4}, {1,4,7}, {3,4,7} --> 配个位数"9"
g. {9,8,6,4} => max = 9 * 83 * 651 * 4720 = 2295321840
结尾{1,2,3,7}取三依乘积分类:
1: {1,3,7}
2: {2,3,7} --> 配个位数"6"
4: {1,2,7} --> 配个位数"8"
6: {1,2,3}
h. {9,8,6,3} => max = 9 * 84 * 651 * 3720 = 1830820320 出局
i. {9,8,5,4} => max = 9 * 83 * 561 * 4720 = 1977996240 出局
j. {9,7,6,5} => max = 9 * 73 * 641 * 5820 = 2451017340
结尾{1,2,3,4,8}取三依乘积分类:
2: {1,3,4}, {1,4,8} --> 配个位数"6"
4: {1,3,8}, {2,3,4}, {2,4,8}
6: {1,2,3}, {1,2,8}, {3,4,8} --> 配个位数"7"
8: {1,2,4}, {2,3,8} --> 配个位数"9"
k. {9,7,6,4} => max = 9 * 73 * 651 * 4820 = 2061547740
结尾{1,2,3,8}取三依乘积分类:
4: {1,3,8}
6: {1,2,3}, {1,2,8} --> 配个位数"7"
8: {2,3,8} --> 配个位数"9"或"4"(4太小)
l. {9,7,6,3} => max = 9 * 74 * 651 * 3820 = 1656222120 出局
m. {9,7,5,4} => max = 9 * 73 * 561 * 4820 = 1776541140 出局
以上c, d, f, g, j, k仿照b的作法应该可以用纸笔在一两天内爆完...
粗估大约需要乘开8 * 4 * 33 ~ 1000个组合在其中寻找最大的回文数
※ 引述《jurian0101 (Hysterisis)》之铭言:
: ※ 引述《LPH66 (圬琐)》之铭言:
: : 题目网址: http://www.puzzleup.com/2012/?home
: : http://www.puzzleup.com/2012/puzzle/?260
: : 答题时限: 11月29日7PM-比赛结束(约12月12日)
: : 加分时限: 11月29日7PM-12月4日6:59PM
: : 答对可得基本分100分。答案可上传5次,每改1次答案从基本分扣20分。
: : 另有两种加分: 1. 加分时限内答对。例:第N天答对,可加(6-N)分。
: : 2. 题目越困难,加分越多。例:这题有n%的人答错,答对者加n分。
: : ◆Palindromic Number
: : Using all 10 digits (0-9) only once, one 1-digit, one 2-digit, one 3-digit,
: : and one 4-digit numbers are formed. When these four numbers are multiplied
: : the result is a palindromic number. What can be the maximum value for this
: : palindromic number?
: : 使用 0 到 9 十个数字各一次,构成一位数、两位数、三位数及四位数各一个。
: : 当这四个数相乘会得到一个回文数(译注)。问这个回文数最大多少?
: : 译注:回文数是指正读反读都相同的数,如 12321。
: 落落长的一行解 <<<<这叫哪门子一行
: f = (1000 #1 + 100 #2 + 10 #3 + #4) (100 #5 +10 #6 + #7) (10 #8 + #9) #10 &;
: Max[
: f@@@Select[
: Cases[Permutations[Range[0, 9]],
: {Except[0], _, _, Except[0 | 5],
: Except[0], _, Except[0 | 5],
: Except[0], Except[0 | 5],
: Except[0 | 5]}],
: Reverse[IntegerDigits[f @@ #]] == IntegerDigits[f @@ #] &
: ]]
: 好我承认说不上是一行解决 = = 总之起码有个办法(虽然称为暴力解)可确知答案了
: 再回头来揣摩一下,能不能别跑10!次判别多麽丑陋的方法啊。
: - - - - 洞洞手洞洞脑的分隔线 - - - -
: 乘积最大是十位数9xxx*8xx*7x*6 = 3 xxx xxx xxx,
: 我决定起初要很乐观的假设结果的乘积是十位数,绝不是因为偷看答案
: 而是因为十位数又是回文数,它一定是11的倍数多了这个线索。
: 排列出的 一位与两位不可能是11倍数,因此 四位数 或 三位数是11的倍数。
: 此线索保留
: 10位数的乘积以1,2,3开头,但1,3不合,因为{1,3,5,7,9}挑四个在个位,不可能变出1或3
: 故只有2可能
: 满足 2 xxx xxx xxx 开头数字 = 9*8*7*5 或 9*8*6*5
: 因此9和8绝对会被开头用掉
: 满足 x xxx xxx xx2 结尾数字 = 1*2*3*7 或 1*3*4*6 或 2*3*6*7(同时用掉6,7不合)
: 所以
: 9 x y 1 9 x y 1
: 8 z 2 8 z 3
: 5 3 5 4
: x 7 剩 0 4 6 x 6 剩 0 2 7
: __________ ____________
: (9,8,5) (1,2,3) 可替换 (9,8,5) (1,3,4) 可替换
: 看似有 3!*3!*3! *2 = 432 种情况,但其实更少,因为有11倍数这条件可以用
: 9**1 以左式为例 ,
: 8*2
: 53 若8** 11倍数,是803
: 7 9** .. 902
: 5** .. 561
: xyyz*803*xz*7 x \in {9,5} && y \in {4,6} && z \in{1,2} 八种
: xyyz*902*xz*7 x \in {8,5} && y \in {4,6} && z \in{1,3} 八种
: xyyz*561*xz*7 x \in {9,8} && y \in {4,6} && z \in{2,3} 八种
: 若三位数非11被数,则四位数必须是
: 11|abcd -> (a-d) ± (b-c) = 0 或 11
: 因b,c \in {0,4,6} -> b-c \in ±{2,4,6}
: 总之四位数只可能是 9042, 8041,8063, 5401, 5203
: 9042*x6y*xy*7 四种
: 8041*x6y*xy*7 ..
: 8063*x3y*xy*7 ..
: 5401*x6y*xy*7 ..
: 5023*x4y*xy*7 ..
: - - - -
: 9**1 剩 0 2 7
: 8*3
: 54
: 6
: xzzy*803*xy*6 八种
: xzzy*924*xy*6 ..
: 9724*x0y*xy*6 四种
: 8701*x2y*xy*6 ..
: 8723*x0y*xy*6 ..
: 5203*x7y*xy*6 ..
: 5027*x7y*xy*6 ..
: OAO,削减到8*2+4*5+8*2+4*5 = 72 种情况了
: 问题是答案不在里面,所以不做了,掯。
: 因为首位数是 9*8*7*5 或 9*8*6*5 的假定是错的,因为这两个只是
: 首位数必定是2的情况。5*6*7*8 和 5*6*7*9 都差一点点适当的排列也是个2字头
: 结论是答案在5 6 7 9开头 <-----怎麽可能用这种方法筛出来,一定是
: Program-Up
: Program-Up
: Program-Up
: 不用它的优雅方式难道没有吗
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.34.189.136
※ 编辑: SocketAM2 来自: 114.34.189.136 (12/01 17:47)
※ 编辑: SocketAM2 来自: 114.34.189.136 (12/01 17:54)