python 刷题时遇到的坑

2015-10-20 16:02:13 +08:00
 yongzhong
在用 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))
3519 次点击
所在节点    Python
10 条回复
lrqrun
2015-10-20 16:19:55 +08:00
Time limit exceeded ,测试数据这么大还是换语言吧, python 计算这么慢肯定超时的。
yongzhong
2015-10-20 16:29:01 +08:00
@lrqrun 主要想着 python 写起来方便.c/c++不熟,java 那代码量又....
mickeyandkaka
2015-10-20 16:33:40 +08:00
cf faq 说过不保证所有语言在用正确算法的情况下能在给定时间内通过,所以还是换 c/c++吧。
paw
2015-10-20 16:41:19 +08:00
用 pypy 试试
billgreen1
2015-10-20 16:44:51 +08:00
list 的 in 操作 和 append 都是比较耗时的,试试 dict ?
还有,既然都是 sorted ,当 i * k > max(a)的时候,还有必要继续下去吗?
cysu
2015-10-20 16:47:24 +08:00
有用 py3 过的 http://codeforces.com/contest/274/submission/11605253
善用右边搜索功能 XD...
lll9p
2015-10-20 16:49:09 +08:00
用 set 会快非常多
starsoi
2015-10-20 16:49:10 +08:00
py3 的坑
i / k not in s: i / k 的结果是 float...
应该用 //
yongzhong
2015-10-20 17:03:42 +08:00
@cysu
@starsoi
in s 这个操作花费了大量时间,代码没到位
niseceric
2015-10-20 22:23:36 +08:00
@yongzhong 直接用 set() 为什么要排序? list 的 member test 是 O(n), set/dict 是 O(1)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/229563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX