CF1064B 题解

Equations of Mathematical Magic

Posted by 周琪岳 on May 20, 2021

切入点:对方程进行转化

目标:卡常

本体的暴力解法无疑很简单,5min写完喜提TLE、
所以,需要卡时间

化简方程

a - (a ^ x) - x = 0
a -x = a ^ x

解题思路

由于异或的运算需转化为二进制,所以可以按位进行运算、判定

当a = 0, x = 1, a-x =-1, a^x =1,不满足题意

当a = 0, x = 0, a-x = 0, a^x = 0,满足题意

当a = 1, x= 1, a - x = 0, a ^ x = 0, 满足题意

当a = 1, x= 0, a - x = 1, a ^ x = 1,满足题意

所以,在写代码的时候,可以直接判断,若a = 0,x有一种可能;若a = 1,则x有两种可能

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

using namespace std;

int t, n, cnt; // cnt为x的可能的解得数量

int main() {
    cin >> t;
    while(t --) { // 多组输入首选while循环
        cin >> n; // 读入
        cnt = 1; // 0乘任何数都是0,所以初始化为1
        // 转二进制
        while(n) {
            if(n%2 == 1) { // n为1,则有两种可能的解
                cnt *= 2; // 小学数学知识
            }
            n/=2; // 更新n
        }
        cout << cnt << endl; // 打印出cnt的值
    }
    return 0;
}