概述
一。快速幂
1 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ 2 /* 对于有可能爆数组的值要强制转换类型 */ 3 /* 并对这个值取模mod */ 4 /* const int mod (1e9为double类型) */ 5 /* 强制转换为int */ 6 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
1 int fast_pow(int n,int k){ 2 int ans = 1;//在函数内部声明。 3 if(k == 0) 4 return 1; 5 for(;k;k>>=1,n=(LL)n*n%mod) 6 if(k&1) 7 ans=(LL)ans*n%mod; 8 return ans; 9 }
二。并查集压缩路径时
int find(int x){ if(fa[x]==x) return x; else{ int t=fa[x]; fa[x]=find(t);//先等于find(t),再返回; } return fa[x]; }
三。取模时
for(int i = 2;i <= k+1;i++) for(int j = 1;j <= i;j++){ f[i][j] = (LL)(f[i-1][j]+f[i-1][j-1]) % mod;//取模的运算级高,加法要加括号; }
四。读字符串时
char s[100]; scanf("%s",s);//只写变量名称,不写大小; scanf("%s",s+1);//从下标[1]开始存;
读下一个字符串前要读一个空字符串,(行末空格和回车);
五。函数内的变量最好是局部变量。
六。开数组和定义新变量时一定要对照原题中的数据范围,防止越界爆数组或是数组开大浪费。
七。提交前注意检查头文件和读入输出文件‘
freopen(".in","r",stdin); freopen(".out","w".stdout);//尤其是这一行。不要用斜杠注释掉‘’
八。注意比较形似的STL
lower_bound(); upper_bound(); //在一个升序数组上进行二分查找。 //前者返回第一个大于等于查询值的位置; //第二个返回第一个大于查询值的位置;
九。一般遇到让若干项元素的最小值最大或最大值最小的问题,要用二分的方法;
二分答案mid,检查一下能不能满足题中的条件,如果可以,下一步在[mid+1,r]中再二分,反之在[l,mid]中二分。
十。牢记欧几里得算法和扩展欧几里得算法
int gcd(int a,int b){ if(!b) return a; else return gcd(b,a&b); }//欧几里得算法。
void exgcd(int a,int b,int &d,int &x,int &y){ if(!b){ d = a; x = 1; y = 0; } else{ exgcd(b,a%b,d,y,x); y-=((a/b)*x); } }//扩展欧几里得算法。
有时得到的x,y是负数,解集为(x+k*b' , y-k*a');
b' = b/gcd(a,b);
a' = a/gcd(a,b);
十一。取模的基本性质
(a+b)%b = ((a%n)+(b%n))% n;
(a- b)%b = ((a%n)-(b%n)+ n)% n ;
a*b%n = (a%n)*(b&n)%n;
除法不能取模,如果要取模,要先要求逆元;
十二。标记用完要清零。
十三。大数据的运算要用高精度。
十四。01背包和完全背包的区别
void ZeroOnePack(int f[],int V,int v,int w){ for(int i = V,i>=v;--i) f[i] = max(f[i],f[i - v] + w); }
void CompletePack(int f[],int V,int v,int w){ for(int i = v;i <= V;i++) f[i] = max(f[i],f[i - v] + w); }
十五。int a;int b;double sum;
在计算sum = a + b;时要把a和b强制转化成double类型
int a;int b; double sum; sum = (double) a + b;
转载于:https://www.cnblogs.com/syx-799/p/5765532.html
最后
以上就是高贵豆芽为你收集整理的写代码要注意的几点。的全部内容,希望文章能够帮你解决写代码要注意的几点。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复