Advertisement

2020 CCPC 绵阳站 Lottery(思维, 二进制)

阅读量:

2020 CCPC 绵阳站 L.Lottery(思维,二进制)

题目

https://pintia.cn/problem-sets/1322796904464203776/problems/1322798545527595019

题意

给出 n 组数据 a x(其中每个 a 的值均一致),表示拥有 x 个 2 的 a 次方,试问利用这些数值最多可以构造出多少种不同的数字。

题解

当某一连续区间内所有数值之和不足以抵达后续指定的二进制位时,应将该区间独立划分。最终结果即为各区间贡献值的乘积。
例如:3(2,5),(4,2),(5,1)
其中2能够作用于4,而4同样能够作用于5,因此这三者构成一个连续区间。
如何计算单个区间的贡献?
可以将一个5转换为两个4,这样就得到四个4;接着将这四个4转换为4×2²=16个2,此时2的数量达到21个。该区间的贡献值即为2的数量加1,即21+1=22。
最终答案只需将各个区间的贡献值相乘即可得出。
由于x的取值范围上限约为1e9,大致相当于2的32次方,因此每个区间内相邻两个数之间的差距不会超过32。

AC代码

复制代码
    #include<bits/stdc++.h>
    using namespace std;
    #define l

全部评论 (0)

还没有任何评论哟~