1 条题解
-
0
自动搬运
来自洛谷,原作者为

7KByte
**搬运于
2025-08-24 22:27:40,当前版本为作者最后更新于2021-06-20 16:56:04,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
首先题目已经给出了结论,就是对于任意 均有解。
所以如果 中后 个数和 中前 个数两两配对,就可以转化为 的子问题。
所以对于 中最后一个数 ,在 中至少存在一个数 使得 。我们只记录 中最小的 。
关键结论: 。
说人话,就是将 后面这一段和 前面这一段按顺序两两配对一定是合法解。
感性理解以下,因为在 区间内的数和 配对都不合法,而 是第一个合法的,所以 和 最后几位相同,而这包括了区间 。
理性分析以下,我们令 中为 ,而 中为 的最高位为第 位,那么枚举 的过程就是将最低的 位一直加到后 位和 完全相同。那么再减回去也一定完全相同。
#include<cstdio> #define rep(i,a,b) for(int i=a;i<=b;i++) int main(){ int n,m;scanf("%d%d",&n,&m); for(int i=n-1,j=m;~i;){ int k=j; while((k&i)!=i)k++; rep(r,0,k-j)printf("%d %d\n",i--,k-r); j=k+1; }return 0; }
- 1
信息
- ID
- 5883
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者