#gear. 2026提高组模拟赛08-T3 程老师的变速箱
2026提高组模拟赛08-T3 程老师的变速箱
时间限制:1000ms 内存限制:512MB
题目描述
程老师这周在检修一台老式变速箱。拆开外壳,轴上齐齐整整排着 个齿轮,第 个齿轮的齿数是 ,检修单上一个个都量好记下了。编号从进给端开始, 号在最外头, 号在最里头,位置是焊死的,谁也不许换。
老师傅判断两个齿轮的配合度,看的不是齿数差,而是"咬合纹"。工程上把一对齿轮的咬合纹定义为它们齿数的按位异或值。什么叫按位异或?把两个数都写成二进制,对齐之后逐位比较:相同记 ,不同记 ,拼回去得到的数就是异或结果。比如 (二进制 )和 (二进制 )的异或是 (二进制 );再比如 (二进制 )和 (二进制 ),四位全都不同,异或是 (二进制 )——这是四位二进制里能拿到的最大值。咬合纹越大,说明两个齿轮的齿形在更多位上互补,配合起来越有讲究,越值得记进修检报告。
不过变速箱里有个物理限制:齿轮都穿在同一根轴上,离得太远的两个齿轮中间隔着别人,根本碰不到一块儿。检修手册写得明白:只有编号之差不超过 的两个齿轮才有可能真正啮合。换句话说,齿数再互补,编号离远了也只能干看着——齿数最大的那个齿轮和跟它最互补的那个,往往偏偏隔着老远。检修的时候老师傅只能拿着卡尺在轴上比划:从每个位置往前后各数 个,只有落在这一小段里的,才算得上"能对上眼"的候选。
程老师想知道:在所有可能啮合的齿轮对里,最大的咬合纹是多少。也就是找一对 且 ,使 最大( 表示按位异或)。注意他要的只是这个最大值本身,并不需要报告是哪两个齿轮取到的。
这台变速箱是上世纪的老古董,轴上的齿轮多的时候能有几十万个,齿数也是有大有小,大的能到十亿量级。老师傅年纪大了,眼神跟不上:从前还能拿着检修单一对一对地比划,现在光是齿轮编号就数得眼花。更要命的是,轴上各区段疏密不一,拨叉行程 每次检修还要根据磨损情况重新校准,并不是定数。程老师看着满桌子的检修单直犯愁:一对一对地算异或、再比大小,算到猴年马月也算不完——得想个快办法。
临走前,老师傅把程老师拉到一边又补了一句:轴上的齿轮偶尔会有齿数一模一样的,碰到了也别嫌麻烦,照样按规矩算;还有,编号是焊死在轴上的,哪个跟哪个离得近,看编号差就知道了,不用去量实物距离。程老师把这两条也记进了注意事项。第二天一早,他就坐在检修台前,对着密密麻麻的齿数表开始琢磨:总不能真的一对一对试过去。
输入格式
第一行两个整数 ,表示齿轮数和最大允许编号差。
第二行 个整数 ,表示每个齿轮的齿数。
输出格式
一行一个整数,表示最大咬合纹。
数据范围
| 测试点编号 | 特殊性质 | |
|---|---|---|
| 1 ~ 2 | 无 | |
| 3 ~ 6 | ||
| 7 ~ 8 | ||
| 9 ~ 10 | A | |
| 11 ~ 12 | B | |
| 13 ~ 16 | 无 | |
| 17 ~ 20 |
- 特殊性质 A:。
- 特殊性质 B:。
- 对于全部数据,,,。
样例
样例 1
输入:
5 2
8 1 1 1 7
输出:
9
解释:齿数 和 的异或是 ,很诱人——但它们分别在 号和 号位,编号差 ,根本碰不到。编号差不超过 的对里,最大的是 号位()和 号位()的啮合:( 号位和 号位也是 )。
样例 2
输入:
4 1
5 3 6 2
输出:
6
解释:,只有相邻齿轮能啮合:,,,最大为 。
样例 3
输入:
2 1
0 0
输出:
0
解释:唯一的一对齿轮齿数都是 ,。
- ID
- 665
- 类型
- 传统题
- Time Limit
- 1000ms
- Memory Limit
- 512MiB
- 上传者
相关
在下列比赛中: