标签:can clu void 基础 lld pre span 分治 main
我真是个垃圾,滚回去刷普及组了
1>快速幂+模运算
#include<cstdio> #include<cstdlib> using namespace std; long long a,b,k; long long q_pow(long long x,long long y) { int i=0; long long j=x,sum=1; while(y) { if(y&(1<<i)) { y^=(1<<i); sum=sum*j%k; } i++,j=j*j%k; } return sum%k;//注意这里要写mod,因为如果b==0,则不会进入循环 } int main() { scanf("%lld%lld%lld",&a,&b,&k); printf("%lld^%lld mod %lld=%lld",a,b,k,q_pow(a%k,b)); return 0; }
我好垃圾啊,水题随便一写就是一小时,难过
2>幂次方
分解成二进制数
#include<cstdio> #include<cstdlib> using namespace std; int n; int f[20001],lg[20001]; void pre() { int i=1,j=0; while(i<20001) { f[i]=j; i<<=1,j++; } for(int i=2;i<20001;i++) { lg[i]=lg[i-1]; if(f[i]) lg[i]++; } } void dfs(int x) { if(x==1) printf("2(0)"); else if(x==2) printf("2"); else { int i=lg[x]; x^=(1<<i); printf("2"); if(i>1) printf("("),dfs(i),printf(")"); while(x && --i) if(x&(1<<i)) { printf("+"); printf("2"); if(i>1) printf("("),dfs(i),printf(")"); x^=(1<<i); } if(x) printf("+2(0)"); } } int main() { scanf("%d",&n); pre(); dfs(n); return 0; }
3>CDQ求逆序对数
标签:can clu void 基础 lld pre span 分治 main
原文地址:https://www.cnblogs.com/xwww666666/p/11368333.html