代码编织梦想

problem link

Naively, a brute force recursion solution be implemented with O ( n ) \mathcal O (n) O(n) complexity.

int work(int x)
{
	if(x==1)return 0;
	return x+work(x>>1)+work((x>>1)+(x&1))
}

However, since all possible x x x can be represented as n ⋅ 2 − k + [ 0 / 1 ] n\cdot 2^{-k}+[0/1] n2k+[0/1], the number of possible x x x does not exceed 2 ⋅ log ⁡ 2 ( n ) 2\cdot \log_2(n) 2log2(n)

Then, we can intuitively implement a memorization search with map.

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
using namespace std;
map <long long,long long> f;
long long n,ans;
long long work(long long x)
{
	if(x==1)return 0;
	if(f[x])return f[x];
	return f[x]=x+work(x>>1)+work((x>>1)+(x&1));
}
int main()
{
	cin>>n;
	cout<<work(n)<<endl;
	return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Brian_Pan_/article/details/136096140

[dax] divide函数_山茶花开时。的博客-爱代码爱编程

语法格式 DIVIDE(<numerator>, <denominator> [,<alternateresult>]) 参数说明 numerator:被除数(分子),可以是常数,也可以是DAX表达式 denominator:除数(分母),可以是常数,也可以是DAX表达式 alternateresu

基础数学问题整理-爱代码爱编程

    最近刷了一些关于基础数学问题的题目,大致是关于组合数、分解质因数还有一些思维题,题目来自洛谷的【数学1】基础数学问题 - 题单 - 洛谷,很多思路还是之前没有见过的,都是简单到一般难度的题目(橙、题、绿题),特别做个整理。 目录 组合数问题 编号 组合数问题  分解质因数 Hankson 的趣味题 细胞分裂  思维题

java-爱代码爱编程

目录  一.  二分查找(递归): 代码详解: 运行结果: 二分查找优化: 优化代码:  运行结果(返回对应查找数字的下标集合):  ​编辑  二分查找(非递归): 二. 插值查找  代码详解: 运行结果:  三. 斐波那契[黄金分割查找] 代码详解:  运行结果:  一.  二分查找(递归): 前提条件: 所要

【nicn的刷题日常】之打印整数二进制的奇数位和偶数位-爱代码爱编程

  目录 1.题目描述  2.解题思路  3.解题     1.题目描述  获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列 2.解题思路  1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0 2. 以同样的方式提取偶数位置  检测num中某一位是0还是1的方式:    1. 将num

力扣344-爱代码爱编程

反转字符串 题目链接 解题思路 双指针算法两个指针向中间靠拢,直至相遇交换两个指针的值 class Solution { public: void reverseString(vector<

排序算法-爱代码爱编程

原创不易,转载请注明出处。欢迎点赞收藏~ 插入排序是一种简单直观的排序算法,它的基本思想是将待排序的元素分为已排序和未排序两部分,每次从未排序部分中选择一个元素插入到已排序部分的合适位置,直到所有元素都插入到已排序部分,完成排序。 具体的插入排序算法如下: 从第一个元素开始,将其视为已排序部分。取出下一个未排序元素,在已排序部分从后往前扫描

【算法训练营】数字盒子,重编码,成绩排序(python实现)-爱代码爱编程

数字盒子 问题描述 你有一个盒子,你可以往里面放数,也可以从里面取出数。 初始时,盒子是空的,你会依次做 Q 个操作,操作分为两类: 插入操作:询问盒子中是否存在数 x,如果不存在则把数 x 丢到盒子里。删除操作:询问盒子中是否存在数 x,如果存在则取出 x。 对于每个操作,你需要输出是否成功插入或删除。 输入格式

p1026 [noip2001 提高组] 统计单词个数-爱代码爱编程

题目传送门 题目描述 给出一个长度不超过 200 的由小写英文字母组成的字母串(该字串以每行 20 个字母的方式输入,且保证每行一定为 20 个)。要求将此字母串分成 k 份,且每份中包含的单词个数加起来总数最大。 每份中包含的单词可以部分重叠。当选用一个单词之后,其第一个字母不能再用。例如字符串 this 中可包含 this 和 is,选用 thi