# 0x00 基本演算法_位運算
阿新 • • 發佈:2020-07-25
0x00 基本演算法_位運算
位運算
AcWing 89. a^b
#include <bits/stdc++.h> using namespace std; typedef long long int lll; int power(lll a,lll b,lll p){ lll ans = 1%p; for(;b;b >>= 1){ if(b&1) ans=ans*a%p; a=a*a%p; } return ans; } int main(){ lll a,b,p; cin>>a>>b>>p; cout<<power(a,b,p); return 0; }
AcWing 90. 64位整數乘法
#include <bits/stdc++.h> using namespace std; typedef long long int lll; lll mul(lll a,lll b,lll p){ lll ans=0; for(;b;b>>=1){ if(b&1) ans=(ans+a)%p; a=a*2%p; } return ans; } int main(){ lll a,b,p; cin>>a>>b>>p; cout<<mul(a,b,p); return 0; }
AcWing 91. 最短Hamilton路徑
#include <bits/stdc++.h> using namespace std; const int N=21,M=1<<20; int weight[N][N],f[M][N]; int main(){ int n; scanf("%d",&n); for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ scanf("%d",&weight[i][j]); } } memset(f,0x3f,sizeof(f)); f[1][0]=0; for(int i=1;i<(1<<n);i++){ for(int j=0;j<n;j++){ if(i>>j&1){ for(int k=0;k<n;k++){ if((i^1<<j)>>k&1){ f[i][j]=min(f[i][j],f[i^1<<j][k]+weight[k][j]); } } } } } cout<<f[(1<<n)-1][n-1]<<endl; return 0; }