在用 python 刷 cf 水题的时候经常会遇到一些莫名其妙的问题,今天又遇到了一个
在这么个题的时候 http://codeforces.com/contest/274/problem/A 得到 Time limit exceeded on test 9
查看详情发现这组测试数据都比较大,而我的代码明明就和其他人的 ac 代码一样(java,c++.翻了好几页也没有找到 python 的 ac 甚至提交)
是我的代码不对还是真的踩到坑了?
以下是我的代码,py3
# coding=utf-8
n, k = list(map(int, input().split(' ')))
a = list(map(int, input().split(' ')))
a.sort()
s = []
for i in a:
if i % k != 0 or i / k not in s:
s.append(i)
print(len(s))
1
lrqrun 2015-10-20 16:19:55 +08:00
Time limit exceeded ,测试数据这么大还是换语言吧, python 计算这么慢肯定超时的。
|
3
mickeyandkaka 2015-10-20 16:33:40 +08:00
cf faq 说过不保证所有语言在用正确算法的情况下能在给定时间内通过,所以还是换 c/c++吧。
|
4
paw 2015-10-20 16:41:19 +08:00
用 pypy 试试
|
5
billgreen1 2015-10-20 16:44:51 +08:00
list 的 in 操作 和 append 都是比较耗时的,试试 dict ?
还有,既然都是 sorted ,当 i * k > max(a)的时候,还有必要继续下去吗? |
6
cysu 2015-10-20 16:47:24 +08:00 1
有用 py3 过的 http://codeforces.com/contest/274/submission/11605253
善用右边搜索功能 XD... |
7
lll9p 2015-10-20 16:49:09 +08:00
用 set 会快非常多
|
8
starsoi 2015-10-20 16:49:10 +08:00
py3 的坑
i / k not in s: i / k 的结果是 float... 应该用 // |
10
niseceric 2015-10-20 22:23:36 +08:00
@yongzhong 直接用 set() 为什么要排序? list 的 member test 是 O(n), set/dict 是 O(1)
|