问题描述
在蓝桥王国,数字的大小不仅仅取决于它们的数值大小,还取决于它们所形成的“封闭图形”的个数。
封闭图形是指数字中完全封闭的空间,例如数字 11、22、33、55、77 都没有形成封闭图形,而数字 00、44、66、99 分别形成了 11 个封闭图形,数字 88 则形成了 22 个封闭图形。值得注意的是,封闭图形的个数是可以累加的。例如,对于数字 6868,由于 66 形成了 11 个封闭图形,而 88 形成了 22 个,所以 6868 形成的封闭图形的个数总共为 33。
在比较两个数的大小时,如果它们的封闭图形个数不同,那么封闭图形个数较多的数更大。例如,数字 4141 和数字 1818,它们对应的封闭图形的个数分别为 11 和 22,因此数字 4141 小于数字 1818。如果两个数的封闭图形个数相同,那么数值较大的数更大。例如,数字 1414 和数字 4141,它们的封闭图形的个数都是 11,但 14<4114<41,所以数字 1414 小于数字 4141。 如果两个数字的封闭图形个数和数值都相同,那么这两个数字被认为是相等的。
小蓝对蓝桥王国的数字大小规则十分感兴趣。现在,他将给定你 nn 个数 a1,a2,…,ana1,a2,…,an,请你按照蓝桥王国的数字大小规则,将这 nn 数从小到大排序,并输出排序后结果。
输入格式
第一行包含一个整数 nn,表示给定的数字个数。
第二行包含 nn 个整数 a1,a2,…,ana1,a2,…,an,表示待排序的数字。
输出格式
输出一行,包含 nn 个整数,表示按照蓝桥王国的数字大小规则从小到大排序后的结果,每两个数字之间用一个空格分隔。
样例输入
3
18 29 6
样例输出
6 29 18
样例说明
对于给定的数字序列 [18,29,6][18,29,6],数字 1818 的封闭图形个数为 22,数字 2929 的封闭图形个数为 11,数字 66 的封闭图形个数为 11。按照封闭图形个数从小到大排序后,得到 [29,6,18][29,6,18]。
由于数字 2929 和数字 66 的封闭图形个数相同,因此需要进一步按照数值大小对它们进行排序,最终得到 [6,29,18][6,29,18]。
评测用例规模与约定
对于 50%50% 的评测用例,1≤n≤2×1031≤n≤2×103,1≤ai≤1051≤ai≤105。
对于所有评测用例,1≤n≤2×1051≤n≤2×105,1≤ai≤1091≤ai≤109。
运行限制
语言 | 最大运行时间 | 最大运行内存 |
---|---|---|
C++ | 1s | 256M |
C | 1s | 256M |
Java | 3s | 512M |
Python3 | 10s | 512M |
PyPy3 | 3s | 512M |
Go | 5s | 512M |
JavaScript | 5s | 512M |
完整代码
import os
import sys# 请在此输入您的代码
n=int(input())
L=list(map(int,input().split()))
A={'0':1,'4':1,'6':1,'9':1,'8':2}
def demo(x):count=0for i in str(x):count=count+A.get(i,0)return count,int(x)
L_1=sorted(L,key=demo)
print(*L_1)