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;
}


相关文章
|
7月前
|
C++ iOS开发
开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适 // 提示:输入身高(厘米)算体重(斤),然后判断算出的体重和输入的体重差值在正负10斤
开发一款软件,根据公式(身高-108)*2=体重,可以有10斤左右的浮动。来观察测试者体重是否合适 // 提示:输入身高(厘米)算体重(斤),然后判断算出的体重和输入的体重差值在正负10斤
111 0
|
算法 C++
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
【每日算法Day 98】慈善赌神godweiyang教你算骰子点数概率!
139 0
|
编译器 C++ 容器
C++/PTA 气球升起来
程序设计竞赛时,赛场升起各色气球多么激动人心呀!志愿者送气球忙得不亦乐乎,观战的某人想知道目前哪种颜色的气球送出最多。
154 0
|
人工智能
UPC2021个人训练赛第39场 C: 粉兔找妹子(换根dp)
UPC2021个人训练赛第39场 C: 粉兔找妹子(换根dp)
101 0
UPC2021个人训练赛第39场 C: 粉兔找妹子(换根dp)
UPC-趾压板矩阵(强行找规律)
UPC-趾压板矩阵(强行找规律)
104 0
UPC-趾压板矩阵(强行找规律)
【CCCC】L3-022 地铁一日游 (30分),floyd+大模拟
【CCCC】L3-022 地铁一日游 (30分),floyd+大模拟
265 0
|
安全
【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序
【CCCC】L3-009 长城 (30分),计算几何+凸包,极角排序
144 0
|
人工智能 BI Shell
UPC-购买巧克力(贪心)
UPC-购买巧克力(贪心)
108 0