AtCoder Beginner Contest 340C - Divide and Divide

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] n⋅2−k+[0/1], the number of possible x x x does not exceed 2 ⋅ log ⁡ 2 ( n ) 2\cdot \log_2(n) 2⋅log2(n)

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

cpp 复制代码
#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;
}
相关推荐
Lear14 小时前
【链表】LeetCode 142.环形链表
算法
CoovallyAIHub15 小时前
2025目标检测模型全景图:从RF-DETR到YOLOv12,谁主沉浮?
深度学习·算法·计算机视觉
澪吟15 小时前
算法性能的核心度量:时间复杂度与空间复杂度全解析
数据结构·算法
咪咪渝粮15 小时前
108. 将有序数组转换为二叉搜索树
算法·leetcode
lzptouch15 小时前
蚁群(Ant Colony Optimization, ACO)算法
人工智能·算法·机器学习
苏纪云15 小时前
算法<C++>——双指针操作链表
c++·算法·链表·双指针
louisdlee.15 小时前
扫描线1:朴素扫描线
数据结构·c++·算法·扫描线
wan5555cn16 小时前
中国启用WPS格式进行国际交流:政策分析与影响评估
数据库·人工智能·笔记·深度学习·算法·wps
AndrewHZ16 小时前
【图像处理基石】图像形态学处理:从基础运算到工业级应用实践
图像处理·python·opencv·算法·计算机视觉·cv·形态学处理
仰泳的熊猫16 小时前
LeetCode:1905. 统计子岛屿
数据结构·c++·算法·leetcode