题解:P14570 「LAOI-11」Metamorphosism
题意
给定正整数
-
a_i + a_j = a_k -
a_i \times a_j = a_k -
a_i \oplus a_j = a_k 上述等式的任意一种。
思路
我们可以从数的奇偶性下手。
对于加法运算,显然存在奇奇得偶,奇偶得奇,偶偶得偶。
对于异或运算,由于奇数二进制结尾为
因此,我们保证序列中全是奇数即可。因为两奇数无论相加还是相异或都会得到偶数,而序列中又不存在偶数,因此加法和异或这两个等式不会出现在序列中。
如果我们从
所以,我们不妨从
Code
#include <iostream>
#include <cstdio>
using namespace std;
int n, m, cnt = 0;
int main()
{
scanf("%d%d", &n, &m);
m = m - !(m & 1); // 由于从大到小枚举奇数,m 可能为偶数,所以起点要保证 m 是奇数。
for(int i = m;i >= 1;i = i - 2){
if(cnt == n) break; // 枚举够 n 个数。
printf("%d ", i);
cnt++;
}
return 0; // 结束 (。・ω・。)
}