当前位置: 首页 > news >正文

UVa 371 Ackermann Functions

题目描述

阿克曼函数的一个特性是:函数生成的数列长度无法直接从输入值计算得出。一种特定的整数阿克曼函数定义如下:

f(n)={n/2if n is even3n+1if n is odd f(n) = \begin{cases} n/2 & \text{if } n \text{ is even} \\ 3n + 1 & \text{if } n \text{ is odd} \end{cases}f(n)={n/23n+1ifnis evenifnis odd

该阿克曼函数的特性是它最终收敛到111。示例(起始值在方括号中,后跟生成的数列,数列长度在大括号中):

  • [10] 5 16 8 4 2 1 {6}[10]\ 5\ 16\ 8\ 4\ 2\ 1\ \{6\}[10]5168421{6}
  • [13] 40 20 10 5 16 8 4 2 1 {9}[13]\ 40\ 20\ 10\ 5\ 16\ 8\ 4\ 2\ 1\ \{9\}[13]4020105168421{9}
  • [14] 7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 {17}[14]\ 7\ 22\ 11\ 34\ 17\ 52\ 26\ 13\ 40\ 20\ 10\ 5\ 16\ 8\ 4\ 2\ 1\ \{17\}[14]7221134175226134020105168421{17}
  • [19] 58 29 88 44 22 … 2 1 {20}[19]\ 58\ 29\ 88\ 44\ 22\ \dots\ 2\ 1\ \{20\}[19]582988442221{20}
  • [32] 16 8 4 2 1 {5}[32]\ 16\ 8\ 4\ 2\ 1\ \{5\}[32]168421{5}
  • [1] 4 2 1 {3}[1]\ 4\ 2\ 1\ \{3\}[1]421{3}

输入格式

输入包含多行,每行两个整数,表示区间的起始和结束值。最后一行以0 0结束。

输出格式

对于每个区间,输出:

Between L and H, V generates the longest sequence of S values.

其中LLLHHH是区间的边界(小的在前),VVV是生成最长序列的第一个值(如有并列取较小的),SSS是序列长度。

样例输入

1 20 35 55 0 0

样例输出

Between 1 and 20, 18 generates the longest sequence of 20 values. Between 35 and 55, 54 generates the longest sequence of 112 values.

题目分析

问题的本质

这是经典的3n+13n+13n+1问题(也称考拉兹猜想、冰雹猜想)。需要计算区间内每个数生成到111的序列长度,并找出最长者。

序列长度定义

从起始数开始,按规则生成,直到到达111为止。注意:起始数本身也算一个值。

例如:[10]→5→16→8→4→2→1[10] \to 5 \to 16 \to 8 \to 4 \to 2 \to 1[10]5168421,长度为666101010111666个数)。

数据范围

输入值在323232位整数范围内,但中间值可能超过323232位,需要使用long long

优化策略

使用记忆化搜索memoization\texttt{memoization}memoization)缓存已计算的值。由于区间最大可能很大(如1∼1061 \sim 10^61106),直接计算每个数会重复大量计算。


参考代码

// Ackermann Functions// UVa ID: 371// Verdict: Accepted// Submission Date: 2016-06-25// UVa Run Time: 0.000s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intcache[500010]={0};// 缓存序列长度// 递归计算从 number 到 1 的序列长度intcounter(longlongintnumber){// 奇数:3n+1,偶数:n/2if(number&1)number+=(number<<1)+1;elsenumber>>=1;if(number==1)return1;// 如果在缓存范围内且未计算过,递归计算if(number<=500000){if(!cache[number])cache[number]=counter(number);return1+cache[number];}// 超出缓存范围,继续递归return1+counter(number);}intmain(){ios::sync_with_stdio(false);// 预处理所有 1..500000 的序列长度for(inti=1;i<=500000;i++)cache[i]=counter(i);intfirst,second,start,end;while(cin>>first>>second,first&&second){start=min(first,second);end=max(first,second);intresult=0,maxi=start;for(inti=start;i<=end;i++){longlongtemp=i;intsteps=0;// 处理大于缓存范围的值,直到进入缓存范围while(temp>500000){if(temp&1)temp+=(temp<<1)+1;// 3*temp+1elsetemp>>=1;// temp/2steps++;}// 加上缓存中的长度steps+=cache[temp];// 更新最大值if(steps>result){result=steps;maxi=i;}}cout<<"Between "<<start<<" and "<<end;cout<<", "<<maxi<<" generates the longest sequence of "<<result<<" values."<<endl;}return0;}
http://www.jsqmd.com/news/943101/

相关文章:

  • 车库蓬包选型攻略:佛山业主实测避坑指南 - 品牌优选官
  • 岳阳电磁铁采购成本优化指南:同样预算下如何选到最划算的厂家 - 优质企业观察收录
  • 魔高一尺道高一丈
  • 4.1 监督学习入门:线性回归与分类
  • 天猫超市卡怎么回收?2026最新攻略:线上/二手/熟人全对比 - 可可收公众号
  • 教培AIGEO内容合规红线与账号长效避雷维稳策略|企优托一网推马奔
  • 西安金典建筑装饰装修:新城靠谱的旧房改造公司有哪些 - LYL仔仔
  • Alphabet计划募资800亿美元,全力押注AI基础设施建设
  • 2026年嘉兴AI搜索优化与短视频全案运营:制造业获客方案对照拆解 - 企业名录优选推荐
  • 深度解析nCov2019_data_crawler开源数据工程:从Python爬虫源码剖析到公共卫生数据挖掘实战的自动化采集系统
  • 告别Oracle官网下载烦恼:用Homebrew在Mac上一行命令搞定JDK 21安装与切换
  • PyCharm配置与爬虫入门指南
  • CMake中GLOB命令的“坑”与“宝”:从一次构建失败案例,聊聊自动收集源文件的正确姿势
  • 论文提前检测重复率高会影响最终检测结果吗?
  • MATLAB实现LFM信号脉冲压缩:匹配滤波仿真脚本与性能分析
  • 珠海爱彼皇家橡树表针掉了一根!在表盘里“游走”,会不会划伤表盘?紧急处理方法来了 - 亨得利官方维修中心
  • 手表回收避坑实测:我带绿水鬼亲测4店,合扬最快15分钟办结到账 - 合扬奢侈品交易中心
  • 4.2 决策树与随机森林
  • STM32F407通过SPI驱动ADS8361实现16位双通道同步采样(Keil工程+硬件配置指南)
  • 用PyTorch从零搭建U-Net:手把手教你实现医学图像分割(附完整代码与DRIVE数据集处理)
  • UVa 372 WhatFix Notation
  • 2026年6月无锡跑网约车租车避坑指南:正规直营门店TOP3推荐 - 资讯速览
  • 运维避坑指南:用非root用户安装KingbaseES V8的正确姿势(附服务注册与开机自启)
  • 实验随笔|SQL 数据库安全权限实操
  • 如何用Rust+Vue技术栈构建高性能漫画下载器:哔咔漫画下载器深度解析
  • 在高通 Hexagon 上运行 BitNet:自定义 1.58 位内核实践
  • 2026年天津律师口碑榜,立足第三者返还财产/婚内过错取证/损害赔偿 - 速递信息
  • SVD图生视频API踩坑记:Fooocus生成的图片如何用OpenCV无损调整到1024x576分辨率?
  • PUBG-Logitech:5步实现基于图像识别的罗技鼠标宏自动压枪系统
  • 2026/6/1