即日起在codingBlog上分享您的技术经验即可获得积分,积分可兑换现金哦。

Uva 12627 Erratic Expansion之递推

编程语言 hao_zong_yin 6℃ 0评论

注意用long long

#include 

using namespace std;

long long c[50];

long long dfs(int k, int i) {
    if (i == 0) return 0;
    if (k == 0) return 1;
    int kk = 1 << (k - 1);
    if (kk > i) return dfs(k - 1, i) * 2;
    else return dfs(k - 1, i - kk) + c[k - 1] * 2;
}

int main()
{
    c[0] = 1;
    for (int i = 1; i <= 31; i++) {
        c[i] = c[i - 1] * 3;
    }
    int T, k, A, B, flag = 0; scanf("%d", &T);
    while (T--) {
        scanf("%d %d %d", &k, &A, &B);
        printf("Case %d: %lld\n", ++flag, dfs(k, B) - dfs(k, A - 1));
    }
    return 0;
}





转载请注明:CodingBlog » Uva 12627 Erratic Expansion之递推

喜欢 (0)or分享 (0)
发表我的评论
取消评论

*

表情