• 编程注意事项


    注意!!!

    1. 非void类型的函数一定要打return,否则就会本地AC,交上去WA,或者交上去AC,开O2就WA。

    2. 位运算注意优先级,能打括号就打括号,!等逻辑判断运算也要和==,=等区分优先级。

    3. 深搜一般大于2×106或者一定的级别时会爆栈,注意开栈。

    4. 取模时,有减法一定要加上模数再取模,否则会成为负数,如果可能爆long long,可以用二进制位快速乘取模解决,切记能模就模。

    5. 注意看数据范围,有时需要2倍或者4倍空间,有时本身不会爆int,而累加或累乘就会爆int

    6. 数组的空间是你给它赋值或者用到它时就会占满空间,一般一个int为4B,long long和double为8B,float为4B~8B,short为2B,char和bool为1B,unsigned只是无负数。
      除了数组变量空间外,还有时要考虑程序运行所占和函数变量所占空间。而一个变量只声明未用时只占大概1B~4B左右,所以有时看似开爆空间但是过得了,而有时没开爆却因为memset等一类赋值函数导致开爆了空间。

    7. 数组溢出,不开O2的话如果你有没用的数组空间那么溢出就会到那里面,但是也可能会AC,而开了O2就会WA。还有逻辑判断,比如

    #include<cstdio>
    int main(){
    int a=0x7fffffff-100;
    long long b=10000;
    for(long long i=1;i<=b;i++)a++;
    printf("%d
    ",a>0);
    return 0;
    }

    不开O2时会输出0,开了会输出1。
    因为不开O2没有优化,他就会直接去算了后来比较,而优化时它发现a为正数,而a一直在变大,所以a肯定大于0,所以他就把a>0优化成1了,而不知a会爆掉成负数。

    【8. 注意常数优化,比如快读(getchar()或者fread等),i++写成++i,使用register,inline等,使用快速模,不开O2时尽量少用STL,多用自己手写的和位运算,a=a+b尽量写成a+=b,判断奇数偶数用a&1而不用a%2。
    能用一级运算就不要用二级运算。

    【9.开空间时注意,除了数组之外,你的函数运行也需要一定的空间,请勿一次开到上限。【2018.6.15做NOI2017day1T1犯的错,本来52结果0分GG】

    【10.结构体的初始化函数不要这样写

    struct ss{
        int to,last;
        ss(int a=0,int b=0):to(a),last(b){}
    }g[M<<1];   

    它会一开始将所有g赋值,那么空间会特别的大。最好这样写:

    struct ss{
        int to,last;
        ss(){}
        ss(int a,int b):to(a),last(b){}
    }g[M<<1];

    这样会节省空间和开始的赋值的时间,但是要注意局部变量不会初始化为0,小心!

  • 相关阅读:
    201521123088《JAVA程序设计》第8周学习总结
    201521123088《Java程序设计》第七周学习总结
    201521123088《Java程序设计》第6周学习总结
    201521123088《JAVA程序设计》第5周学习总结
    网络15软工个人作业5——软件工程总结
    alpha阶段个人总结
    软件工程网络15个人作业3--案例分析
    结对编程 201521123027
    软件工程网络15个人阅读作业2--提出问题(201521123027 陈龙)
    软件工程网络15个人阅读作业1(201521123027 陈龙)
  • 原文地址:https://www.cnblogs.com/VictoryCzt/p/10053438.html
Copyright © 2020-2023  润新知