2013-12-05 15:49:36Morris

[UVA] 12643 - Tennis Rounds

SampleInput

3 2 5
3 5 7
2 1 2
2 2 1

SampleOutput

3
2
1
1


找兩個節點的最小共同祖先,計算第幾回合會對戰到。

藉由 k, 2*k, 2*k+1 的編號方式,除 2 即可得到共同祖先。


#include <stdio.h>

int main() {
    int n, i, j, k;
    while(scanf("%d %d %d", &n, &i, &j) == 3) {
        i += (1<<n)-1;
        j += (1<<n)-1;
        for(k = 0; k <= n; k++)
            if((i>>k) == (j>>k))
                printf("%d\n", k), k = n;
    }
    return 0;
}