本文主要是介绍AcWing 4617. 解方程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
4617. 解方程 - AcWing题库
【分析】移项之后得到a^x = a-x,把a转为二进制,举个🌰1001
对于为1的位:如果x相应的位置填1,相减之后为0,异或之后为0,相同并且对前面的位没有影响;如果x相应的位置填0,想减之后为1,异或之后也为1,相同并且对前面的位也没影响。
对于为0的位:如果x相应的位置填0,想减之后为0,异或之后也为0,相同并且对前面的位也没影响;但是!如果x相应的位置填1,异或之后为1没问题,但是想减之后虽然也是1,却需要向前面的1借位,这样的话对于减前面的1变成了0,对于异或还是1,也就是0101和1001我们只看第二位,这样不管填0还是1,异或和减的结果都不可能相同了。
综上,1的位置填0或者1,0的位置只能填0,所以统计1的个数即可。
#include<bits/stdc++.h>
using namespace std;int main() {// 536870912int t, a;cin>>t;while (t--) {cin>>a;int cnt = 0;while (a != 0) {if (a % 2 == 1) cnt++;a /= 2;}if (cnt == 0) cout<<1<<endl;else {int ans = 1;while (cnt--) {ans *= 2;}cout<<ans<<endl;}}}
这篇关于AcWing 4617. 解方程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!