UVA 12627 – Erratic Expansion

UVA 12627 – Erratic Expansion

大家好,又见面了,我是全栈君。

一个红球能够分裂为3个红球和一个蓝球。
一个蓝球能够分裂为4个蓝球。

分裂过程下图所看到的:
这里写图片描写叙述

设当前状态为k1。下一状态为k2

k1的第x行红球个数 * 2 ⇒ k2第2*x行的红球个数。
k1的第x行红球个数 ⇒ k2第2*x+1行的红球个数。

特殊处理一下上下边界。递归求解就能够搞定了。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <algorithm>
#include <ctype.h>
#include <iostream>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <assert.h>
#include <time.h>
#include <sstream>

typedef long long LL;
const int INF = 500000001;
const double EPS = 1e-9;
const double PI = acos(-1.0);
using namespace std;
long long gao(int k, int a, int b)
{
    if(a > b) return 0;
    if(k == 0)
    {
        return 1;
    }
    int left = 0, right = 0;
    if(a % 2 == 0)
    {
        left = a;
        a++;
    }
    if(b % 2 == 1)
    {
        right = b;
        b--;
    }
    long long ans = gao(k-1, (a + 1) / 2, b / 2) * 2 + gao(k - 1, (a + 1) / 2, b / 2);
    if(left) ans += gao(k-1, left / 2,  left / 2);
    if(right) ans += gao(k-1, (right + 1) / 2,  (right + 1) / 2) * 2;
    return ans;
}
int main()
{
    #ifdef _Te3st
        freopen("test0.in", "r", stdin);
        freopen("test0.out", "w", stdout);
        srand(time(NULL));
    #endif
    int T, k, a, b;
    scanf("%d", &T);
    for(int i = 1; i <= T; i++)
    {
        scanf("%d %d %d", &k, &a, &b);
        printf("Case %d: %lld\n", i, gao(k, a, b));
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115461.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 画完三角形再画谢尔宾斯基地毯

    画完三角形再画谢尔宾斯基地毯照样废话不说,看代码看注释importjava.awt.Color;importjava.awt.Dimension;importjava.awt.Graphics;importjava.awt.Toolkit;importjava.awt.event.MouseAdapter;importjava.awt.event.MouseEvent;import…

    2022年7月13日
    13
  • 计算机二级Python

    计算机二级Python概述计算机二级在近两年新加了python的选择,趁机考了一下,顺便记录一下学习的一些所获第一章程序设计语言概述考纲考点:这一部分主要是介绍计算机语言的公共常识,一些尝试我就按照自己的理解方式

    2022年7月6日
    16
  • oracle创建用户名和密码_linux安装oracle12c

    oracle创建用户名和密码_linux安装oracle12c转自 http://www.blogjava.net/wangdetian168/archive/2013/12/03/oracle-12c-64-windows.html———————————————————————————————–oracle12c下载|orac…

    2025年7月25日
    0
  • Oracle备份的几种方式【转】[通俗易懂]

    Oracle备份的几种方式【转】[通俗易懂]这里使用Oracle12C来大概演示说明一下rman的基本用法,这里不会深入讨论,因为本人也只是刚刚才接触,只是结合了网上的一些文章以及自己的实践来总结并拿出来大家学习,谢谢目录一、关于备份与恢

    2022年6月30日
    29
  • p2p在线直播流(何为流媒体)

    看到网上一些吹牛P2P低延时的文章,觉得不是很靠谱,抽空调研了一下这个问题。P2P低延时的几个方向:   方法一:通过直接采集并编码多媒体帧,将多媒体帧切分成1KB大小的数据颗粒,采用push策略的进行小包传输,提高传输效率,减小传输延时;          具体参见:http://www.google.com/patents/CN101945129A?cl

    2022年4月10日
    67
  • java中 数组声明,java数组声明格式

    java中 数组声明,java数组声明格式java声明动态数组,java对象数组详解,java中声明数组,java数组声明格式Java中数组的声明一维数组的声明:在Java中,数组是独立的对象,有自身的方法,不是变量的集合。数组的声明:类型标识符数组名[]或者类型标识符[]……一维数组一维数组可以存放上千万个数据,并且这些数据的类型是完全相同的,使用java数组,必须经过两个步骤,声明数组和分…

    2022年6月2日
    37

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号