CCF201503-Python题解
图像旋转
原题连接:http://118.190.20.162/view.page?gpid=T27
试题编号: | 201503-1 |
试题名称: | 图像旋转 |
时间限制: | 5.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。
计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式
输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。
接下来n行每行包含m个整数,表示输入的图像。 输出格式
输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。
样例输入
2 3
1 5 3 3 2 4 样例输出
3 4
5 2 1 3 评测用例规模与约定
1 ≤ n, m ≤ 1,000,矩阵中的数都是不超过1000的非负整数。
|
题解:第一次写时,尴尬,提交超时,总结下教训[j*m-i] 这种运算尽量减少,比较耗时
11 for i in range(1, m+1): 12 for j in range(1, n+1): 13 if j != n: 14 print(a[j*m-i], end=" ") 15 else: 16 print(a[j*m-i]) 17 # a = a[::-1]
未超时代码(事实证明,sys.stdin好用,花费时间少)
1 n, m =input().split() 2 n, m = int(n), int(m) 3 4 img1 = [] 5 for i in range(n): 6 a = input().split() 7 for j in range(len(a)): 8 a[j] = int(a[j]) 9 img1 += [a] 10 11 img2 = [] 12 for i in range(m-1, -1, -1): 13 tmp = [] 14 for j in range(n): 15 tmp += [img1[j][i]] 16 img2 += [tmp] 17 18 for i in range(m): 19 print(img2[i][0],end="") 20 for j in range(1,n): 21 print("", img2[i][j], end="") 22 print()
1 import sys 2 3 n,m=input().split() 4 n,m=int(n),int(m) 5 arr=[list(map(int, sys.stdin.readline().strip().split())) for _ in range(n)] 6 7 for j in range(m-1,-1,-1): 8 for i in range(n): 9 print(arr[i][j],end=" ") 10 print()
数字排序
原题链接:http://118.190.20.162/view.page?gpid=T26
试题编号: | 201503-2 |
试题名称: | 数字排序 |
时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: |
问题描述
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
输入格式
输入的第一行包含一个整数n,表示给定数字的个数。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。 输出格式
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
样例输入
12
5 2 3 3 1 3 4 2 5 2 3 5 样例输出
3 4
2 3 5 3 1 1 4 1 评测用例规模与约定
1 ≤ n ≤ 1000,给出的数都是不超过1000的非负整数。
|
这里统计个数:
方法一:个数就借用二维数组来标记和计数,在多维类表删除的时候,可以用切片的方法,输出的要求是按第二个元素降序,第一个元素升序,这里借用sort()函数的key来指定,直白说这种方法就是打表!
1 n=int(input()) 2 a=list(map(int, input().split())) 3 4 couple=[] 5 for i in range(n): 6 couple.append([a[i],1]) 7 8 for i in range(n-1): 9 for j in range(i+1,n): 10 if couple[i][0]==couple[j][0] and couple[i][1]!=1005 and couple[j][1]!=1005: 11 couple[i][1]+=1 12 couple[j][1]=1005 13 14 15 for c in couple[ : ]: 16 if c[1]==1005: 17 index=couple.index(c) 18 del couple[index] 19 20 couple.sort(key=lambda u:(-u[1],u[0])) 21 22 for i in couple: 23 print(' '.join(map(str, i)))
当然这种方法在n很大的时候是有风险的,因此方法二使用字典。
1 n=int(input()) 2 3 ans={} 4 tmp=list(map(int, input().split())) 5 for t in tmp: 6 if t in ans.keys(): 7 ans[t]+=1 8 else: 9 ans[t]=1 10 res=[] 11 for k,v in ans.items(): 12 res.append([k,v]) 13 14 res=sorted(res,key=lambda u:[-u[1],u[0]]) 15 for r in res: 16 print(r[0],r[1])
参考链接
https://blog.csdn.net/authorized_keys/article/details/108880112(列表多维排序)