zoukankan      html  css  js  c++  java
  • 卡常技巧

    某天,看到这样一个场景(要求时限3000ms)

    是不是突然很想骂人?

    不过,以下一些知识可能帮到你

    教你如何卡常(c++)(我太弱了,大佬勿喷

    1.相信你们都知道 for(int i=1;i<=n;i++),改为++i更快

    然后发现照样没快多少(哎~~)

    怎么办呢?

    2.相信你们还是知道 把诸如int a=1 改为 int a(1) 更快

    发现自己少了一百多毫秒,但依然T了

    这时候

    3.相信你们依然知道 在函数前加inline可以加快(可能不会吧)

    4.在int前加register(这个也很基本吧)

    于是乎愉快地A了

    再想想还有什么你知道的卡常?

    5.重要的一点--读入优化(应该都知道)

    void read(int &x)
    {
        int f=1;
        x=0;
        char s=getchar();
        while(s<'0'||s>'9')
        {
            if(s=='-')
                f=-1;
            s=getchar();
        }
        while(s>='0'&&s<='9')
        {
            x=x*10+s-'0';
            s=getchar();
        }
        x*=f;
    }
    
    
    

    又快了一些。

    6.能不用变量就不用,转而用常量(大部分人也知道吧)

    7.取模用减法代替

    ll mo(ll x,ll y)
    {
    	return x+y>=mod?x+y-mod:x+y;
    }
    

    8.尽量用位运算

    比方说:

    a%2改为a&1

    a*2改为a<<1

    a*2+1改为a<<1|1

     

    9.数组尽量不要是偶数个数的(原因不明)

    偶数个数后满了3ms(有时候会慢很多) 

    10.把循环给尽量展开,速度会快很多

      如:把for(int i=1;i<=n;++i) a=1,b=1;

        改为for(int i=1;i<=n;++i)a=1;

          for(int i=1;i<=n;++i)b=1;

    11.尽量消除条件的跳转

    12.访问a[i]后访问a[i+1],a[i+2]等会快很多

    13.尽量不要用algorithm中的自带函数(除sort等)

    希望以上技巧对你有帮助

  • 相关阅读:
    telnet linux 参数
    telnet服务 linux机器
    how to learn
    mysql关键字
    linux 下iptables配置详解
    C#调用开源图像识别类库tessnet2
    netty入门实例
    android布局属性详解
    安卓高手之路之ClassLoader(四)
    安卓高手之路之 GDI图形引擎篇
  • 原文地址:https://www.cnblogs.com/yigejuruo/p/10656779.html
Copyright © 2011-2022 走看看