단순 귀속

5049 단어 귀속
비교적 간단한 귀속 문제.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
", t, work(k, a, b)); } return 0; }

좋은 웹페이지 즐겨찾기