关于CF-2276A思路及题解
题目概要:给定两个数 (a,b),我们要找到最大的正整数 x,满足题目要求的关系式;如果不存在合法的 x,就输出 -1。
我的主要思路就是二分答案,关键是如何去check(),我的check思路如下:
题目把数字b拆成两段,一段长z、一段长q,两段要分别套不同系数,所以要用带余除法(整除 + 取模)把这两段拆开。
设我们现在假设答案是x(代码 mid),拿b除以x:
b = k*x + q
k=b/x,q=b%x。余数q一定满足 0<=q<x。
把长度x当成一段基准块。
b里面有完整的k块,还多出来一小段长度q。
那么剩下空缺的那一块长度就是 z = x - q。
题目规则:
- 空缺的z这一段,每单位要乘系数(k+1)
- 多出来的q这一段,每单位要乘系数(k+2)
总代价就是:(k+1)z+(k+2)q
我们要判断a能不能大于等于这个总代价,这就是 check 里那个判断式。
然后题解代码如下:

浙公网安备 33010602011771号