zoukankan      html  css  js  c++  java
  • UVa 12627 奇怪的气球膨胀(分治)

    https://vjudge.net/problem/UVA-12627

    题意:一开始有一个红气球。每小时后,一个红气球会变成3个红气球和1个蓝气球,而1个蓝气球会变成4个蓝气球。如图所示分别是经过0,1,2,3,小时后得情况。经过k小时后,第A~B行一共有多少个红气球。

    思路:由图分析,每次把图分为四个部分,右下角的部分全为蓝气球,不用去管他,剩下三部分都是一样的并且和前一小时的图形是一样的,这样的话我们可以计算出每个时刻红气球的总数。

            既然每次可以分为四部分,那么很明显的就是用分治法来解决。分别计算出B行之前和A-1行之前的红气球总数,那么A~B行的气球总数就是两者相减。

     1 #include<iostream> 
     2 using namespace std;
     3 
     4 long long ans[35];
     5 
     6 long long f(int k,int i)
     7 {
     8     if (i==0)     return 0;
     9     if (k==0)     return 1;
    10     if (i < 1 << (k - 1))   return 2 * f(k - 1, i);
    11     else return f(k - 1, i - (1 << (k - 1))) + 2 * ans[k - 1];
    12 }
    13 
    14 int main()
    15 {
    16     //freopen("D:\txt.txt", "r", stdin);
    17     int n;
    18     cin >> n;
    19     int k, a, b, kase=0;
    20     ans[0] = 1;
    21     for (int i = 1; i < 30; i++)
    22     {
    23         ans[i] = 3 * ans[i - 1];
    24     }
    25     for (int i = 0; i < n; i++)
    26     {
    27         cin >> k >> a >> b;
    28         long long num = f(k, b) - f(k, a - 1);
    29         cout << "Case " << ++kase << ": " << num << endl;
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    矩阵乘法
    年关了,抛一个模拟ip刷票的php程序
    mysql处理大数据合并的另一种方法
    php之aop实践
    轻量级php框架phpk v1.0发布
    eclipse
    super关键字的使用
    方法的重写
    方法的重载
    java 构造器 (构造方法)
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/6357355.html
Copyright © 2011-2022 走看看