读了a byte of python后,顺手把a byte of vim也读了。唔,就是用起来还不是很顺手……
刚做的codeforces r195d2c,C一下就过了。。。python就一直TLE。看了下status,竟然没有用python3做的,python2的倒是有几个。明明只是N=10^5,O(N*lgN)的复杂度,却要各种找优化……看来python还真是非高手不能用:用C就是怎样烂的代码只要复杂度没错基本都能过,用python就非得尽量优化不可啊。。。
贴个code纪念一下吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
n = int(input()) a = list(map(int, input().split())) mxa = max(a) v = 1 << 30 while v > mxa: v >>= 1 while True: d = -1 for i in range(n): if a[i] & v: d &= a[i] if d % v == 0: break v >>= 1 b = [i for i in a if i & v] print(len(b)) print(' '.join(map(str, b))) |
这是C的,对比一下就清楚了,python是最后才构建b[]的,每次赋值太慢了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
int n,a[100000],k,b[100000]; int main() { int i,d,v; while(~scanf("%d",&n)) { k=0; for(i=0;i<n;i++) scanf("%d",a+i); for(v=1<<30;1;v>>=1) { k=0; d=-1; for(i=0;i<n;i++) { if(a[i]&v) { d&=a[i]; b[k++]=a[i]; } } if(d%v==0) break; } printf("%d\n",k); for(i=0;i<k-1;i++) printf("%d ",b[i]); printf("%d\n",b[k-1]); } return 0; } |