第三章还是属于入门级别,全部刷完配套练习题,能打下一个好点的基础。比较机械的知识点是在日期处理和进制转换上,下面对做过的题目和相应知识点做一下总结,以便后期方便回顾。
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级题目有几个测试点没过,等第二轮再慢慢琢磨,不着急,需要静下心思考,到底哪出错,程序还是要靠一点点调出来的,不怕出错,就怕不肯用心,不肯花时间思考。