对于左移加:其实就是解方程
由于i已确定 可以预处理出逆元
对于右移异或 可以直接模拟 因为前面一坨不会变
#include<bits/stdc++.h>
#define uint unsigned int
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);cout.tie(NULL);
int T;
cin>>T;
while(T--)
{
uint x;
cin>>x;
x*=4294901761u;
for(int i=31-11;i>=0;i--)
{
x^=((x>>(i+11))&1)<<i;
}
x*=954437177u;
for(int i=31-6;i>=0;i--)
{
x^=((x>>(i+6))&1)<<i;
}
x*=3222273025u;
cout<<x<<'\n';
}
}
本文深入探讨了位运算中的左移加与右移异或操作,并通过具体代码实例展示了如何利用这些技巧解决特定问题。文章首先介绍了左移加的概念,指出通过预处理逆元可以简化解方程过程。接着,详细解释了右移异或的直接模拟方法,强调其在保持数据不变性方面的优势。最后,提供了一段C++代码,演示了如何将这些理论应用于实际编程中。
5779

被折叠的 条评论
为什么被折叠?



