(bc #45) A - Dylans loves numbers (hdu 5272)

快要炸了..

tle成狗

因为是tle,看了下自己没有写cin cout,估计就是算法的问题...

我是先存了二进制的每一位到数组,然后扫一遍...

嗯,这都tle...

那我不存不扫,直接记录当前二进制位和之前二进制位..

logn的复杂度总可以了吧啊?

还TLE..........

嗯,其实已经发现 n是小于等于1e18的,没开long long

但是一位没开long long 会是wa...就没理...

之后实在黔驴技穷,改了下,竟然过了...

然后想明白了.

因为存二进制的时候有一个while

没开long long 的话就炸了,不知道读进去的是什么,while就出不来,于是就tle了.T T

果然太年轻.

 1 
 2
 3    
 4    /*************************************************************************
 5    	> File Name: code/bc/#45/1001.cpp
 6    	> Author: 111qqz
 7    	> Email: rkz2013@126.com 
 8    	> Created Time: 2015年07月29日 星期三 13时25分01秒
 9     ************************************************************************/
10    
11    #include<iostream>
12    #include<iomanip>
13    #include<cstdio>
14    #include<algorithm>
15    #include<cmath>
16    #include<cstring>
17    #include<string>
18    #include<map>
19    #include<set>
20    #include<queue>
21    #include<vector>
22    #include<stack>
23    #define y0 abc111qqz
24    #define y1 hust111qqz
25    #define yn hez111qqz
26    #define j1 cute111qqz
27    #define tm crazy111qqz
28    #define lr dying111qqz
29    using namespace std;
30    #define REP(i, n) for (int i=0;i<int(n);++i)  
31    typedef long long LL;
32    typedef unsigned long long ULL;
33    const int inf = 0x7fffffff;
34    const int N=1E3+5;
35    int a[N];
36    LL n,nn;
37    int main()
38    {
39        int T;
40        cin>>T;
41        while (T--)
42        {
43    	scanf("%lld",&n);
44    	nn = n ;
45    	int k = 0;
46    	while (nn)
47    	{
48    	    k++;
49    	    a[k]=nn&1;
50    	    nn = nn >>1;
51    	}
52    	int ans = 0;
53    //	for ( int i = 1 ; i <= k ; i++ )
54    //	    cout<<a[i]<<endl;
55    	for ( int i = 1 ; i <= k ; i++ )
56    	{
57    	    if (a[i]==1&&a[i-1]==0)
58    		ans++;
59    	}
60    	printf("%d\n",ans);
61        }
62    	return 0;
63    }
64    
65
66