CF1699A solution

Problem

给定一个 \(n\),要求找出三个自然数 \(a,b,c\) 满足 \((a\oplus b)+(b\oplus c)+(a\oplus c)=n\)

link->https://codeforces.com/contest/1699/problem/A

Solution

又是 CF 经典诈骗题。

借用我们教练对异或运算的描述:异或运算就是在二进制情况下的不进位加法。

既然异或是“不进位加法”,那么他一定有一些加法的特性,比如说,\(a+b\)\(a\oplus b\) 的奇偶性相同。具体证明可以自己对 \(a\)\(b\) 的二进制个位枚举思考。

接下来我们考虑,什么情况下是不存在 \(a,b,c\) 满足条件的。

\(a,b,c\) 有三种奇偶情况:三偶、一奇两偶、两奇一偶、三奇。

\((a\oplus b)+(b\oplus c)+(a\oplus c)\) 的奇偶性有以下几种情况:

  • \(+\)\(+\)\(+\)\(+\)\(+\)\(=\) 偶。

  • \(+\)\(+\)\(+\)\(+\)\(+\)\(=\) 偶。

  • \(+\)\(+\)\(+\)\(+\)\(+\)\(=\) 偶。

  • \(+\)\(+\)\(+\)\(+\)\(+\)\(=\) 偶。

上面本应该是异或运算,我们却写成了加法运算,但是却并不影响答案的正确性,正是因为异或和加法运算所导致的奇偶性变化相同。

也就是说,\(n=(a\oplus b)+(b\oplus c)+(a\oplus c)\) 有且仅有可能是偶数,则如果 \(n\) 是奇数即输出 -1

再看满足情况的 \(n\):我们不妨设 \(a=b=0\),则原式 \(=(0\oplus 0)+(0\oplus c)+(0\oplus c)=2c\),解得 \(n=\frac{n}{2}\),而 \(n\) 是偶数,则 \(c\) 有自然数解。输出先后输出上述 \(a,b,c\) 的值即可。

posted @ 2022-08-01 12:00  lsj2009  阅读(31)  评论(0)    收藏  举报