D数树,牛客小白月赛78,思维

链接:登录---专业IT笔试面试备考平台_牛客网

来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒

空间限制:C/C++ 262144K,其他语言524288K

64bit IO Format: %lld

题目描述

"开导!"

众所周知,树是一种特殊的图。

众所周知(二),导出子图是由该图顶点的一个子集和该图中两端均在该子集的所有边的集合组成的图。

注1:二叉树是有向图。

注2:有向图的导出子图,还是有向图。

小沙有 nnn 个节点,他需要你构造出一颗有根二叉树,使得二叉树的所有导出子图是一颗满二叉树的数目尽可能多。

请问构造出来的有根二叉树的所有导出子图是一颗满二叉树的数目最多是多少?

你能帮帮不会数/树的小沙吗?

输入描述:

复制代码

第一行读入一个整数 TTT ,代表多组样例。

随后 TTT 行,每行输入一个正整数 nnn。

保证有 1≤T≤1051 \le T \le 10^51≤T≤105,1≤n≤10181 \le n \le 10^{18}1≤n≤1018。

输出描述:

复制代码

对于每组样例输出一行整数代表答案。

由于答案过大,所以请输出答案对 109+710^9 + 7109+7 取模的值。

示例1

输入

复制10 1 2 3 4 5 6 7 8 9 10

复制代码
10
1
2
3
4
5
6
7
8
9
10

输出

复制1 2 4 5 7 8 11 12 14 15

复制代码
1
2
4
5
7
8
11
12
14
15

说明

复制代码

对于 777 个节点的最优二叉树为

其 111111 个导出子图为满二叉树的有

cpp 复制代码
#include<iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<math.h>
#include<map>

using namespace std;
typedef long long LL;
const LL mod = 1e9 + 7;
LL n;

int fun(LL a) {
	LL t = 1,ret=0;
	while (t <= a) {
		ret += a / t;
		t *= 2;
	}
	return ret;
}

int main() {
	int cnt;
	cin >> cnt;
	while (cnt--) {
		cin >> n;
		LL ans = 0;
		LL t = 1, sum = 0,p=1;
		while (sum + t <= n) {
			ans = (ans + p) % mod;
			sum += t;
			t *= 2;
			p += t;
		}
		if (n - sum > 0) {
			ans = (ans + fun(n - sum)) % mod;
		}
		cout << ans << endl;
	}
	return 0;
}
相关推荐
egoist20231 小时前
【C++指南】一文总结C++二叉搜索树
开发语言·数据结构·c++·c++11·二叉搜索树
lidashent1 小时前
数据结构和算法——汉诺塔问题
数据结构·算法
ん贤3 小时前
2023第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组(真题&题解)(C++/Java题解)
java·c语言·数据结构·c++·算法·蓝桥杯
我的sun&shine10 小时前
高级数据结构03RB树
数据结构·b树
_GR13 小时前
2022年蓝桥杯第十三届C&C++大学B组真题及代码
c语言·数据结构·c++·算法·蓝桥杯·动态规划
快来卷java13 小时前
常见集合篇(二)数组、ArrayList与链表:原理、源码及业务场景深度解析
java·数据结构·链表·maven
Stardep14 小时前
算法学习11——滑动窗口——最大连续1的个数
数据结构·c++·学习·算法·leetcode·动态规划·牛客网
rigidwill66615 小时前
LeetCode hot 100—二叉搜索树中第K小的元素
数据结构·c++·算法·leetcode·职场和发展
UP_Continue18 小时前
排序--归并排序
数据结构
飞鼠_19 小时前
详解数据结构之树、二叉树、二叉搜索树详解 C++实现
开发语言·数据结构·c++