![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
代码收集
收集一些有用的代码
Beginner_SNORLAX
这个作者很懒,什么都没留下…
展开
-
代码收集0018——二分法
方法一:int binarySearch(vector<int>& nums,int target){ int left=0,right=nums.size()-1; while(left<=right) { int mid=left+(right -left)>>1; if(nums[mid]==target) return mid; else if(nums[mid]<target)原创 2021-07-12 16:15:05 · 116 阅读 · 0 评论 -
位运算
判断是否是2的幂num&(num-1)100..00011..11原创 2021-03-04 23:37:18 · 121 阅读 · 2 评论 -
代码收集0017——求子集
vector<vector<int>> subsets(vector<int>& nums) { vector<vector<int>> ans; int n=nums.size(); for(int cnt=0;cnt<(1<<n);cnt++)//the cnt subset { vector<int> subset; for(int原创 2021-02-26 20:03:14 · 138 阅读 · 0 评论 -
代码收集0016——树
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: int INF=1e9+7; TreeNode *LCA(T原创 2021-02-22 12:49:10 · 97 阅读 · 0 评论 -
代码收集0015——马拉车算法
class Manacher{private: int maxlen=0,maxcenter=0; void man(string s) { string m="$#"; int n=s.size(); for(int i=0;i<n;i++) { m+=s[i]; m+='#'; } int len=m.size(); vec原创 2021-02-08 23:33:52 · 92 阅读 · 0 评论 -
代码收集0014——找到从起点到终点的路
int Path(vector<vector<int>>& point) { int row=point.size(),col=point[0].size(),ans=0; const vector<vector<int>> direction{{-1,0},{1,0},{0,-1},{0,1}}; int left=0,right=max_possible_ans+1;//we try to use原创 2021-01-30 22:08:29 · 120 阅读 · 0 评论 -
代码收集0013——并查集
class UnionFindSet{private: vector<int> parent;public: UnionFindSet(int n):parent(n) { iota(parent.begin(),parent.end(),0); } int Find(int idx) { if(parent[idx]!=idx) parent[idx]=Find(parent[idx原创 2021-01-23 11:10:51 · 84 阅读 · 0 评论 -
代码收集0012——快速幂与矩阵快速幂
一个自然数k可以写成k=∑1nai∗2i,ai∈{0,1}k=\sum_1^na_i*2^i,a_i\in\{0,1\}k=∑1nai∗2i,ai∈{0,1}的形式。快速幂的思想就基于此。比如a21=a(1∗20+1∗22+1∗24)=a1∗a4∗a16a^{21}=a^{(1*2^0+1*2^2+1*2^4)} =a^1*a^4*a^{16}a21=a(1∗20+1∗22+1∗24)=a1∗a4∗a16C++:(mod为要取模的数,无则删去)long long llpow(lon原创 2020-06-28 20:13:38 · 206 阅读 · 0 评论 -
代码收集0011——组合数取模
C++版本使用方法:卢卡斯定理求逆元的方式:扩展欧几里得算法其中mod是要取余的数long long Extended_Euclid(long long a,long long b,long long &x,long long &y){ if(a==0&&b==0) return -1; if(b==0) { x=1; y=0; return a; } long原创 2020-06-26 22:49:48 · 166 阅读 · 0 评论 -
代码收集0010——质数
int PrimeCount(int n){ int cnt=0; int prime; while(n%2==0) { cnt++; n/=2; } for(prime=3;prime<=n;prime+=2) { while(n!=1) { i...原创 2020-04-26 21:36:26 · 136 阅读 · 0 评论 -
代码收集0009——大整数运算
乘法:int BigInt_Multiply(int num[],int a,int len)//the ans is inverse{ int last=len; int cf=0;//carry flag for(int i=0;i<=len;i++) { num[i]=num[i]*a+cf; if(b[i]>=...原创 2020-04-07 08:02:14 · 166 阅读 · 0 评论 -
代码收集0008——求逆元
扩展欧几里得算法可以求解ax+by=gcd(a,b)这样一个不定方程的同时求出gcd(a,b)C语言long long Extended_Euclid(long long a,long long b,long long *x,long long *y){ if(b==0) { *x=1; *y=0; return a; ...转载 2020-04-03 21:04:18 · 470 阅读 · 0 评论 -
代码收集0007——排列组合
组合:C语言unsigned long long combination(int n,int m){ /* Cnm=n!/(m!*(n-m)!) */ unsigned long long ans=1; if(n==0) return 0; if(n==m||m==0) return 1; if(m>...原创 2020-03-28 14:44:16 · 150 阅读 · 0 评论 -
代码收集0006——前缀波兰式的计算
C语言版:double PrePolish(){ char str[10]; double f1,f2; scanf("%s",str); switch(str[0]) { case'+':{f1=PrePolish();f2=PrePolish();return f1+f2;} case'-':{f1=PrePolish()...原创 2020-03-27 20:15:48 · 224 阅读 · 0 评论 -
代码收集0005——给定年月日返回星期
1就是星期一……7就是星期日int getDay(int year, int month, int day){ if (month == 1 || month == 2) year--; int k = day; int m = ((month - 2) + 12) % 12; if (m == 0) m = 12; int Y = year % 100...转载 2020-03-23 16:25:53 · 107 阅读 · 0 评论 -
代码收集0004——输出数据时用空格填充
要求:已知有cnt个间隔(即(cnt+1)个数据)和space个空格。由空格补足每行长度,空格在所有数据之间尽可能均匀分布,在满足上述条件下,空格尽可能置于靠右的位置。C语言:while(...&&cnt>=0){ printf(""); for(int i=0;cnt&&i<space/cnt;i++) putchar(' ');...原创 2020-03-20 20:57:37 · 158 阅读 · 0 评论 -
代码收集0003——在整行读入并处理字符串时忽略行前空格
C语言通过一个for循环找到第一个不为空格的地方。for(int j=0;str[j]==' ';j++);int start=j;原创 2020-03-20 20:47:03 · 224 阅读 · 0 评论 -
代码收集0002——输出地址
输出一个浮点型的地址 C语言void addressF(char str[]){ double x=atof(str); unsigned char *p=(unsigned char *)&x; int y=sizeof(x); while(y--) printf("%02x ",*p++); printf("\n");}...原创 2020-03-17 19:55:06 · 177 阅读 · 0 评论 -
代码收集0001——求最大公约数(GCD)和最小公倍数(LCM)
求最大公约数(GCD)和最小公倍数(LCM)的代码C语言:int GDB(int a,int b){ if(b==0) return a; else return GDB(b,a%b);}int LCM(int x,int y){ return x*y/GDB(x,y);}可根据需要改为long long...原创 2020-03-17 16:43:12 · 212 阅读 · 0 评论