MT2042 硬币塔

简介: MT2042 硬币塔

ca877c808ba1452bb9ee8d953613be1b.jpg

f9d1c620ccac47f1992bcbd4e57c31bb.jpg

注意点:开long long

#include <bits/stdc++.h>
using namespace std;
const long long int N = 45;
long long int n, i;
long long int coin[N], gold[N];
 
long long int f(long long int n, long long int i) // 求到第n级硬币塔
{
    if (i == 0) // 0层
        return 0;
    if (n == 0)
        return 1; // 0级
    if (i <= 1)
        return 0;             //<=1层
    if (i <= coin[n - 1] + 1) // 在下面的k-1级硬币塔中
        return f(n - 1, i - 1);
    if (i <= coin[n - 1] + 1 + n) // 在中间n个金币中
        return gold[n - 1] + i - coin[n - 1] - 1;
    if (i <= 2 * coin[n - 1] + 1 + n) // 在上面的k-1级硬币塔中
        return gold[n - 1] + n + f(n - 1, i - coin[n - 1] - n - 1);
    return gold[n]; // i大于硬币塔层数
}
 
int main()
{
    cin >> n >> i;
 
    // coin[k]=2*coin[k-1]+k+2 可以看成5层
    // gold[k]=2*gold[k-1]+k
    // gold[0]=1;
    coin[0] = gold[0] = 1;
    for (long long int k = 1; k <= n; k++)
    {
        coin[k] = 2 * coin[k - 1] + k + 2;
        gold[k] = 2 * gold[k - 1] + k;
    }
    cout << f(n, i);
    return 0;
}


相关文章
|
3月前
lanqiao OJ 3513 岛屿个数(2023省赛)
lanqiao OJ 3513 岛屿个数(2023省赛)
20 2
|
3月前
lanqiao oj 186 糖果(状态压缩dp)
lanqiao oj 186 糖果(状态压缩dp)
25 0
|
3月前
lanqiao OJ 264 危险系数
lanqiao OJ 264 危险系数
21 0
|
7月前
|
程序员
老程序员分享:MT【202】内准圆
老程序员分享:MT【202】内准圆
27 0
老程序员分享:MT【202】内准圆
|
8月前
|
C++ iOS开发
|
8月前
蓝桥备战--分糖果OJ2928 贪心 分类讨论
蓝桥备战--分糖果OJ2928 贪心 分类讨论
83 0
|
机器学习/深度学习 算法 C++
剑指offer(C++)-JZ61:扑克牌顺子(算法-模拟)
剑指offer(C++)-JZ61:扑克牌顺子(算法-模拟)
|
物联网
【每日一题Day33】LC799香槟塔 | 动态规划
从顶层的第一个玻璃杯开始倾倒一些香槟,当顶层的杯子满了,任何溢出的香槟都会立刻等流量的流向左右两侧的玻璃杯。当左右两边的杯子也满了,就会等流量的流向它们左右两边的杯子,依次类推。(当最底层的玻璃杯满了,香槟会流到地板上)
106 0
【每日一题Day33】LC799香槟塔 | 动态规划
|
测试技术 Python
PTA 1018 锤子剪刀布 (20 分)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示
163 0