1 条题解
-
0
题目解析
本题是一个交互式问题,需要猜出一个由 0 和 1 组成的未知序列。序列长度为 ( n ),元素只能为 0 或 1。通过调用
suma(i, j)函数可以获取任意两个不同元素 ( a_i + a_j ) 的和。目标是使用尽可能少的询问次数确定整个序列。关键点分析
- 由于元素只能是 0 或 1,两个元素的和可能为 0、1 或 2。
- 通过巧妙选择询问对,可以推导出序列中所有元素的值。核心思路是首先确定前两个元素的值,然后利用已知元素推导其他元素。
- 代码实现了一个高效策略:
- 首先询问 ( a_0 + a_1 ) 的值:
- 如果和为 0,则 ( a_0 = a_1 = 0 )。
- 如果和为 2,则 ( a_0 = a_1 = 1 )。
- 如果和为 1,则 ( a_0 ) 和 ( a_1 ) 中一个为 0,一个为 1。此时需要额外询问 ( a_0 + a_2 ) 和 ( a_1 + a_2 ) 来区分具体赋值。通过比较这两个和值的差,可以确定 ( a_0 ) 和 ( a_1 ) 的值。
- 一旦确定 ( a_0 ) 和 ( a_1 ),对于其余元素 ( a_i )(( i \geq 2 )),通过询问 ( a_0 + a_i ) 即可推导出 ( a_i ) 的值(因为 ( a_0 ) 已知)。
- 首先询问 ( a_0 + a_1 ) 的值:
- 该策略的询问次数为:
- 最好情况(( a_0 + a_1 = 0 ) 或 ( 2 )):( n-1 ) 次询问。
- 最坏情况(( a_0 + a_1 = 1 )):( n ) 次询问。
- 这满足了得分要求(( m \leq n ) 时得 100% 分数),且效率较高。
为什么策略有效?
- 序列元素只有 0 和 1,因此两个元素的和具有确定性。
- 通过固定一个已知元素(如 ( a_0 )),其他元素可以通过一次询问直接推导。
- 在 ( a_0 ) 和 ( a_1 ) 不确定时,通过引入第三个元素 ( a_2 ) 解决歧义,确保整个序列可被唯一确定。
- 1
信息
- ID
- 3787
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 17
- 已通过
- 1
- 上传者