UVa 679 小球下落
题意:这道题规律性极强,虽然是二叉树,但是可以用模拟来写。
1<<20 意思是1的二进制左移20位,即2的20次方。
对于二叉树中一个节点 k ,其左节点,右节点的编号分别是2k 和 2k + 1。
#include<cstdio> #include<cstring> const int maxn = 20; int s[1<<20]; int main() { int d,l; while(scanf("%d%d",&d,&l) != EOF){ memset(s,0,sizeof(s)); int k ,n; n = (1<<d) - 1; for(int i = 0;i < l; i++){ k = 1; while(1){ s[k] = !s[k]; k = s[k] ? 2*k : 2*k + 1; if(k > n) break; } } printf("%d\n",k/2); } return 0; }