算法笔记第三章总结

第三章还是属于入门级别,全部刷完配套练习题,能打下一个好点的基础。比较机械的知识点是在日期处理和进制转换上,下面对做过的题目和相应知识点做一下总结,以便后期方便回顾。
A1026 :一定要注意预处理,否则最大104次查询,每次最多105次操作,共109会超时,基本上这种重复操作的都要考虑预处理,让查询复杂度为O(1)
A1065:long long正溢后是[-263,-2],而负溢后是在[0,263),因为是用补码表示的,所以才得出正溢的右边界,和负溢的左边界,记住就行。正溢是小于0的,负溢是大于等于0的,还有注意A+B不能放在if里面和C比较,会造成数据错误,因为要用到溢出后的数据,一定先把A+B的数据存下来。
B1028,A1006,A1036几乎全用的日期处理的原理,只要定下日期比较的函数,基本就解决了,常用的代码就是下面简单的几段:

bool LessEqu(person a,person b){
	if(a.yy != b.yy) return a.yy <= b.yy;
	else if(a.mm != b.mm) return a.mm <= b.mm;
	else return a.dd <= b.dd;
}
bool MoreEque(person a,person b){
	if(a.yy != b.yy) return a.yy >= b.yy;
	else if(a. mm != b.mm) return a.mm >= b.mm;
	else return a.dd >= b.dd;

还有进制转换,许多题目也是由这几段代码衍生出来的:

//将一个P进制的数x转换为10进制的y
int  y = 0,product = 1;
while( x ){
	y = y + (x % 10) *product;
	x /= 10;
	product *= 10;
} 
//将十进制的y转换为Q进制的数z
int z[40],num = 0;
do{
	z[num++] = y % Q;
	y /= Q;
}while(y);
//注意 如果用while()循环,那么当10进制y为0时,会直接跳出循环,导致数据错误。

行了,需要记忆的点,差不多就这些,还有好几道A级题目有几个测试点没过,等第二轮再慢慢琢磨,不着急,需要静下心思考,到底哪出错,程序还是要靠一点点调出来的,不怕出错,就怕不肯用心,不肯花时间思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值