码迷,mamicode.com
首页 > 其他好文 > 详细

bjfu1277 简单递归

时间:2015-02-10 14:38:18      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

比较简单的递归问题。对于第k时刻的图形,可以平均分成四块,左上,右上,左下这三块的图形是一模一样的,右下的那一块不包含红毛僵尸,所以把那三块里的加起来就是结果了。

/*
 * Author    : ben
 */
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#include <stack>
#include <string>
#include <vector>
#include <deque>
#include <list>
#include <functional>
#include <numeric>
#include <cctype>
using namespace std;
typedef long long LL;
LL three[40];

LL work(int k, int a, int b) {
    int side = 1 << (k - 1);
    if (a > side || b < 1) {
        return 0;
    }
    if (a <= 1 && b >= side) {
        return three[k - 1];
    }
    int aa = a - (1 << (k - 2));
    int bb = b - (1 << (k - 2));
    return 2 * work(k - 1, a, b) + work(k - 1, aa, bb);
}

int main() {
    int T, a, b, k;
    three[0] = 1;
    for (int i = 1; i <= 30; i++) {
        three[i] = three[i - 1] * 3;
    }
    scanf("%d", &T);
    for (int t = 1; t <= T; t++) {
        scanf("%d%d%d", &k, &a, &b);
        printf("Case %d: %lld\n", t, work(k, a, b));
    }
    return 0;
}

 

bjfu1277 简单递归

标签:

原文地址:http://www.cnblogs.com/moonbay/p/4283549.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!