【Jason's_Knowledge】【不定期更新】琐碎知识点及注意事项总结
来源:互联网 发布:淘宝双11红包口令 编辑:程序博客网 时间:2024/05/16 15:27
【不定期更新】琐碎知识点及注意事项总结
1.在使用sort函数对元素类型为结构体的数组进行排序时,可以在结构体内部对比较运算符进行重载。
例如,对结构体按照第一个关键字进行排序:
#include<cstdio>#include<algorithm>using namespace std;#define MAXN (100000+5)struct A{int x,y;bool operator < (const A& srt)const{return x<srt.x;};};A a[MAXN];int n;int main(){scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d%d",&a[i].x,&a[i].y);}sort(a,a+n);for(int i=0;i<n;i++){printf("%d %d\n",a[i].x,a[i].y);}return 0;}
2.运算符优先级
由表中的说明我们可以看出来,四则运算符号的优先级是高于位运算的优先级的。
所以,(x+y)>>1+1;和((x+y)>>1)+1;的运算结果是截然不同的。一定要加以注意。
3.二分查找需要注意的地方
(I)二分求最小值最大(符合条件的值均在左侧区间,求左侧区间的右端点):
int L=0,R=MAXN;//MAXN<=10^7时在算法竞赛中可确保程序在1s内运行结束while(L<R){int MID=(L+R)>>1+1;if(check(MID))L=MID;else R=MID-1;}
(II)二分求最大值最小(符合条件的值均在右侧区间,求右侧区间的左端点):
int L=0,R=MAXN;//MAXN<=10^7时在算法竞赛中可确保程序在1s内运行结束while(L<R){int MID=((L+R)>>1);if(check(MID))R=MID;else L=MID+1;}
4.为规范本人的代码书写,宏定义中一定要注意被定义式要加括号,如下:
#define MAXN (100000+5)#define CLR(x) (memset(x,0,sizeof(x)))
5.结构体中,对变量的定义是有严格顺序的,加入一次性给结构体赋值,需严格按照结构体定义的顺序赋值,如下:
#include<cstdio> #include<algorithm> using namespace std;#define MAXN (100000+5)struct A{int x,y;bool operator <(const A& srt) const{return x<srt.x;}};A a[MAXN];int n;int main() { scanf("%d",&n);for(int i=0;i<n;i++){int x,y;scanf("%d%d",&x,&y);a[i]=(A){x,y};}sort(a,a+n);for(int i=0;i<n;i++){printf("%d %d\n",a[i].x,a[i].y);} return 0; }
6.有理数计算的避免:
若方程式为:x/a,按实数运算;
假设我们已知a的取值范围是[0,10];
我们可以让x乘上0~10的最小公倍数,这样将分母a约掉,以避免x/a的有理数计算。
7.四舍五入:
由于c语言中没有四舍五入函数,只有向下取整函数floor与向上取整函数ceil,所以我们可以通过以下方式实现:使用floor(x+0.5);
floor()函数包含在<cmath>头文件下。
8.以x为底y的对数:
我们知道任何对数都可以转化为以10为底的对数之间的商,以10为底的对数函数是log10(),所以我们可以这样实现:log10(y)/log10()x;
log10()函数包含在<cmath>头文件下。
9.isdigit() 函数
这个函数用来检查是否一个字符是十进制数字字符或EOF。
十进制数字为:0 1 2 3 4 5 6 7 8 9
函数返回值非0,当被判别字符为十进制数字字符。
例:
/* isdigit example */#include <stdio.h>#include <stdlib.h>#include <ctype.h>int main (){ char str[]="1776ad"; int year; if (isdigit(str[0])) { year = atoi (str); printf ("The year that followed %d was %d.\n",year,year+1); } return 0;}
Output
The year that followed 1776 was 1777
10.lower_bound(x,y,z)和upper_bound(x,y,z)
这两个函数的作用如下:
对于一个有序递增序列,序列第一位的地址是x,最后一位的地址是y,我们要寻找一个子序列,这个子序列的所有元素值均为z。
此时,lower_bound(x,y,z)返回这个子序列的第一个元素的下标,upper_bound(x,y,z)返回这个子序列的最后一个元素的下标加1。
lower_bound(x,y,z)和upper_bound(x,y,z)均包含在<algorithm>头文件下。
- 【Jason's_Knowledge】【不定期更新】琐碎知识点及注意事项总结
- 知识点总结(不定期更新)
- 注意事项,不定期更新
- 【Jason's_Knowledge】自动机理论简述
- 算法总结--不定期更新
- 算法核心思想总结及模板(不定期更新)
- 长期更新琐碎易忘知识点。。。。。
- myeclipse使用总结,不定期更新
- STL总结(不定期更新...)
- 计划总结思考-不定期更新
- Git常用命令总结,不定期更新
- SQL知识点小结(不定期更新)
- IOS开发-琐碎的知识点总结1
- C语言基础总结之琐碎知识点
- C语言基础总结之琐碎知识点
- 琐碎知识点
- 琐碎知识点
- 琐碎知识点...
- C语言及程序设计提高例程-23 指针的运算
- C语言及程序设计提高例程-22 用指针法访问数组元素
- C语言及程序设计提高例程-21 首尝排序——冒个泡
- C语言及程序设计提高例程-20 经典:查找的艺术
- linux中socket的连接数
- 【Jason's_Knowledge】【不定期更新】琐碎知识点及注意事项总结
- 大家好
- ACboy needs your help(DP)
- 浏览网页记录 (一)程序员应当知道的事情
- 反片语(Ananagrams)
- Win 7 修改远程桌面端口3389
- [POJ 3155] Hard Life
- <?xml version="1.0" encoding="UTF-8" ?> 这句话是什么意思
- C/C++工程师综合练习卷