用LeetCode学Python

阅读全文

Prezi——一个比PPT炫的玩意儿

很多年前就在某处见过它了,可是当时还不知道它的名字,没想到这么多年后又重逢~

这是它的网址http://prezi.com/index/,mark一下~~开心ing~~

然后至于操作就超级简单了~直接用模板就可以做的超级炫啦~~~啦啦啦~~~

LaTeX启航

有人推荐了 刘海洋的《LaTeX入门》,可以入手一本看看~

另外巧遇一个pdf,简单明了很喜欢,mark一下:点击链接可以直接下载哦~

顺便再吐槽一下Arch的texlive从2012更到2013的时候崩了,这里有个.pacnew的bug,不过最简单的办法就是先卸了2012再装2013就没事啦哈哈~~

uva 679 Dropping Ball

两句话:不要轻易使用模拟编程,算下时间复杂度。“一左一右”之类的联想二进制,学会利用二进制的移位操作。。。

这是模拟过程的代码,可惜超时了

#include <iostream>
#include <cmath>

using namespace std;

void the_case()
{
    int depth, num;
    cin >> depth;
    num = pow(2, depth);
    bool node[num];
    for (int i=0; i<num; i++) node[i] = false;

    int n, r;
    cin >> n;
   for(int k=1; k<=n; k++) 
    {
        int j=1;
        for (int i=1; i<depth; i++)
        {
            if (node[j]==false)
            {
                node[j]=true;
                j = j * 2;
            }
            else 
            {
                node[j]=false;
                j = j*2 +1;
            }
        }
        r = j;
    }
    cout << r << endl;
}

int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        the_case();
    }
    cin.clear();
    return 0;
}

后来很郁闷的从前辈那边学到了算法:观察第i个球与最后位置p的数学关系发现“p的二进制做镜像后和2×i+1的二进制一样”

补充下思考细节,因为对于叶子节点的二进制来说,最高位每两次一循环(01),次高位每4次一循环(0011),次次高位每8位一循环(00001111),就会发现和二进制计数递增数列成镜像

#include <iostream>

using namespace std;

void the_case()
{
    int depth, no;
    unsigned int m; //注意使用unsigned在这种移位操作中
    cin >> depth >> no;
    unsigned int t=0; //同上
    m = no*2-1; //第no个变成2×no+1
    while(depth--) //数的深度等于二进制位数
    {
        t <<= 1; //将t已有位数左移保留
        t += m&1; //这里是提取出m的最低位
        m >>= 1; //将m已经镜像的位数移去
    }
    cout << t << endl;
}

int main()
{
    int c;
    cin >> c;
    while(c--)
        the_case();
    return 0;
}

向前辈表示敬意和感谢,对自己继续勉励!!