#include <cstdio>
#include <cstdlib>
#define LOOK
#define n 3
#define k 2
typedef unsigned U32;
typedef unsigned char U8;
typedef struct
{
U32 state : 31;
U32 bit : 1;
}TBB;
TBB ***branch_level;
TBB *branch_space;
U32 *f_branch;
U32 *branch_num; //1<<f_branch
U32 *state_dim;
U32 *state_way; //1<<state_dim
U32 *branch_way; //branch_num*state_num
void main()
{
U8 i, j, u, s, m, mm;
/***memory space***/
f_branch = new U32 [n]; //[0,1,2]
branch_num = new U32 [n]; //[1,2.4]
state_dim = new U32 [n]; //[0,1,2]
state_way= new U32 [n]; //[1,2.4]
branch_way= new U32 [n]; //[2,4,8]
s=u=0;
for(i=0; i<n; ++i)
{
f_branch[i]=i;
branch_num[i]=1<<i;
state_dim;
state_way[i]=1<<i;
s+=state_way[i];
u+=branch_way[i];
}
branch_level = new TBB ** [s];
branch_space = new TBB [u];
branch_level[0] = (TBB **) branch_space;
for (i = 0, m = 1; m < n; ++i, ++m)
{
branch_level[m] = branch_level[i] + branch_way[i];
for(j=0, mm=1; mm < state_way[i]; ++j, ++mm)
{
branch_level[i][mm] = branch_level[i][j] + \ branch_num[i];
}
}
#ifdef LOOK
for(i=0; i<n; ++i)
{
for(j=0; j<state_way[i]; ++j)
{
for(m=0; m<branch_num[i]; ++m)
{
printf("branch_level[%u][%u][%u].bit=\
%u\n",i,j,m,branch_level[i][j][m].bit);
printf("branch_level[%u][%u][%u].state=\
%u\n",i,j,m,branch_level[i][j][m].state);
}
}
}
#endif
/****************/
system("pause");
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGNzdGRsaWI+CgojZGVmaW5lIExPT0sKI2RlZmluZSBuIDMKI2RlZmluZSBrIDIKCnR5cGVkZWYJdW5zaWduZWQJVTMyOwp0eXBlZGVmCXVuc2lnbmVkIGNoYXIJVTg7Cgp0eXBlZGVmCXN0cnVjdAp7CglVMzIJCXN0YXRlIDogMzE7CglVMzIJCWJpdCA6IDE7Cn1UQkI7CgpUQkIJKioqYnJhbmNoX2xldmVsOwpUQkIJKmJyYW5jaF9zcGFjZTsKVTMyCSpmX2JyYW5jaDsKVTMyCSpicmFuY2hfbnVtOyAvLzE8PGZfYnJhbmNoClUzMgkqc3RhdGVfZGltOwpVMzIJKnN0YXRlX3dheTsgIC8vMTw8c3RhdGVfZGltClUzMgkqYnJhbmNoX3dheTsgLy9icmFuY2hfbnVtKnN0YXRlX251bQoKdm9pZCBtYWluKCkKewoJVTgJCQlpLCBqLCB1LCBzLCBtLCBtbTsKCQoJLyoqKm1lbW9yeSBzcGFjZSoqKi8KCWZfYnJhbmNoID0JCW5ldyBVMzIJCVtuXTsgLy9bMCwxLDJdCglicmFuY2hfbnVtID0JCW5ldyBVMzIJCVtuXTsgLy9bMSwyLjRdCglzdGF0ZV9kaW0gPQkJbmV3IFUzMgkJW25dOyAvL1swLDEsMl0KCXN0YXRlX3dheT0JCW5ldyBVMzIJCVtuXTsgLy9bMSwyLjRdCglicmFuY2hfd2F5PQkJbmV3IFUzMgkJW25dOyAvL1syLDQsOF0KCQoJcz11PTA7Cglmb3IoaT0wOyBpPG47ICsraSkKCXsKCQlmX2JyYW5jaFtpXT1pOwoJCWJyYW5jaF9udW1baV09MTw8aTsKCQlzdGF0ZV9kaW07CgkJc3RhdGVfd2F5W2ldPTE8PGk7CgkJcys9c3RhdGVfd2F5W2ldOwoJCXUrPWJyYW5jaF93YXlbaV07Cgl9CglicmFuY2hfbGV2ZWwgPSBuZXcJVEJCICoqCVtzXTsgCglicmFuY2hfc3BhY2UgPSBuZXcgVEJCCVt1XTsKCWJyYW5jaF9sZXZlbFswXSA9IChUQkIgKiopIGJyYW5jaF9zcGFjZTsKCglmb3IgKGkgPSAwLCBtID0gMTsgbSA8IG47ICsraSwgKyttKQoJewkJCgkJYnJhbmNoX2xldmVsW21dID0gYnJhbmNoX2xldmVsW2ldICsgYnJhbmNoX3dheVtpXTsKCQkKCQlmb3Ioaj0wLCBtbT0xOyBtbSA8IHN0YXRlX3dheVtpXTsgKytqLCArK21tKQoJCXsKCQkJYnJhbmNoX2xldmVsW2ldW21tXSA9IGJyYW5jaF9sZXZlbFtpXVtqXSArIFwgCQkJCWJyYW5jaF9udW1baV07CQoJCX0KCX0KCiNpZmRlZiBMT09LCglmb3IoaT0wOyBpPG47ICsraSkKCXsKCQlmb3Ioaj0wOyBqPHN0YXRlX3dheVtpXTsgKytqKQoJCXsKCQkJZm9yKG09MDsgbTxicmFuY2hfbnVtW2ldOyArK20pCgkJCXsKCQkJCXByaW50ZigiYnJhbmNoX2xldmVsWyV1XVsldV1bJXVdLmJpdD1cCgkJCQkldVxuIixpLGosbSxicmFuY2hfbGV2ZWxbaV1bal1bbV0uYml0KTsKCQkJCXByaW50ZigiYnJhbmNoX2xldmVsWyV1XVsldV1bJXVdLnN0YXRlPVwKCQkJCSV1XG4iLGksaixtLGJyYW5jaF9sZXZlbFtpXVtqXVttXS5zdGF0ZSk7CgkJCX0KCgkJfQoJfQojZW5kaWYKCS8qKioqKioqKioqKioqKioqLwoJc3lzdGVtKCJwYXVzZSIpOwp9