• ACM卡常处理办法(虽然我到现在没遇到)


    今天做预流推送,一样的代码。别人500MS(OI选手)而我5S,百思不得其解,然后我知道了还有卡常这一说。

    我们今天就来看一看吧:

    1.循环展开:

     在缓存和寄存器允许的情况下一条语句内大量的展开运算会刺激 CPU 并发。举个栗子。

    void Init_Array(int *dest, int n)
    {
        int i;
        for(i = 0; i < n; i++)
            dest[i] = 0;
    }
     
     
     
    void Init_Array(int *dest, int n)
    {
        int i;
        int limit = n - 3;
        for(i = 0; i < limit; i+= 4)//每次迭代处理4个元素
        {
            dest[i] = 0;
            dest[i + 1] = 0;
            dest[i + 2] = 0;
            dest[i + 3] = 0;
        }
        for(; i < n; i++)//将剩余未处理的元素再依次初始化
            dest[i] = 0;
    }

    2.特殊运算优化:(或许这真的没用)

     取模优化:

    int MOD(int x, int y){
    	return x - y * (x / y);
    }//==x%y

      绝对值优化:

    inline int Abs(int a){//绝对值优化
    { int b=a>>31; return (a+b)^b; }

    3.前置++/--运算符:

     用++i代替i++。 

    1. 后置++需要保存临时变量以返回之前的值,在 STL 中非常慢。

     2. 事实上,int的后置++ 在实测中也比前置++ 慢0.5倍左右(UOJ 上自定义测试)

    4.比较语句:

    if(){
        ;
    }
    else{
        ;
    } //慢
    
    ()==()?():();// ==可以换成任何二元比较运算符(== >= > < <= )能判断真值即可。

    5. 内联函数:

    int IMhanshu()
    {
    }
    inline int IMhanshu()
    {
    }
    重复使用多的可以使用内联函数,用的少的和递归就别用了。
    

    5.卡cache

    开数多维组的时候小的开在前面,访问多的一维开在前面寻址快。

    6.快读自行查询:

    7.register

    for(int i=0;i<100000000;++i)//慢
    for(register int i=0;i<100000000;i++) //快

    8. #pragma GCC optimize(2)

    这便是O2优化

    它的作用极大,但如果代码不规范,它在优化时会改变某句代码的含义,所以在用时一定要小心从30%TLE变为100%WA;

  • 相关阅读:
    UIScrollView 截图
    cocoapods import 第三方 自动补全
    UIWebView内存泄露问题解决方法
    iOS常用小控件集合
    UIViewController视图控制器视图的生命周期
    UIView
    UITextField
    UITabBar UITabBarController
    iOS图片相似度比较
    iOS获取已安装的app列表(私有库)+ 通过包名打开应用
  • 原文地址:https://www.cnblogs.com/lunatic-talent/p/12798635.html
Copyright © 2020-2023  润新知