位运算
1.快速幂
#include<iostream>
using namespace std;
int main()
{
int a,b,p;
cin>>a>>b>>p;
long long res=1;
while(b)
{
if(b&1) res=res*a%p;
b>>=1;
a=(long long)a*a%p; //a*a会爆int要变成long long
}
cout<<res%p;
}
2.64位乘法
#include<iostream>
using namespace std;
int main()
{
int a,b,p;
cin>>a>>b>>p;
long long res=1;
while(b)
{
if(b&1) res=(res+a)%p;
b>>=1;
a=a*2%p;
}
cout<<res;
}
3.lowbit运算
(n&-n)
4.最短Hamilton路径(排列型枚举)
5.费解的开关(指数型枚举)
为什么不枚举第一行的状态: 这样忽略了第一行状态变化所拉灯的次数,导致结果错误
6.奇怪的汉诺塔