• 卡常数大法好!


    咳咳咳……好东西 _(:зゝ∠)_ 转自某位大佬 http://www.cnblogs.com/widerg/p/7353866.html

    补上另一更巨的巨佬的https://blog.xehoth.cc/PerformanceOptimization/

    C++ Interesting卡常数

    作为一名OIer,在Noip中卡(kǎ)常数可以说是必备技巧。在此总结一下我所知卡常数的神奇手法:

    1. IO优化
      • fread 和 fwrite ,如果还想再优化有mmap....(然而并不会用,好像也没用。。。)
      • 读入优化(这个非常重要!!!!!!!)
      inline int Read()
      {
          int x=0,f=1;char c=getchar();
          while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
          while(c>='0'&&c<='9') {x=x*10+c-'0'; c=getchar();}
          return x*f;
      }
      • 输出优化好像用不到唉( ˇˍˇ )
    2. inline
      在声明函数之前写上inline修饰符(就像上面Read()一样),可以加快一下函数调用,但只能用于一些操作简单的函数。涉及递归,大号的循环等很复杂的函数,编译器会自动忽略inline。

    3. register
      在定义变量前写上register修饰符,用于把变量放到CPU寄存器中,适用于一些使用频繁的变量:

      register int n,m;

      寄存器空间有限,如果放得变量太多,多余变量就会被放到一般内存中;
      快,不是一般的快,快到什么程度呢?:

      register int a=0;
      for(register int i=1;i<=999999999;i++)
      a++;
      int a=0;
      for(int i=1;i<=999999999;i++)
      a++;

      结果:
      优化:0.2826 second
      不优化:1.944 second
      恐怖啊!!!!

    4. 循环展开

      循环展开也许只是表面,在缓存和寄存器允许的情况下一条语句内大量的展开运算会刺激 CPU 并发(前提是你的 CPU 不是某 CPU)...

    5. 取模优化(仅O2)

      //设模数为 mod
      inline int inc(int x,int v,int mod){x+=v;return x>=mod?x-mod:x;}//代替取模+
      inline int dec(int x,int v,int mod){x-=v;return x<0?x+mod:x;}//代替取模-
    6. 前置 ++

      后置 ++ 需要保存临时变量以返回之前的值,在 STL 中非常慢。事实上,int 的后置 ++ 在实测中也比前置 ++ 慢 0.5 倍左右(UOJ 上自定义测试)

    7. 不要开bool,所有bool改成char,int是最快的(原因不明)。

    8. if()else语句比()?():()语句要慢,逗号运算符比分号运算符要快。

    9. 数据结构用指针代替数组(个人觉得无关紧要)

      数组在用方括号时做了一次加法才能取地址!
      所以在那些计算量超大的数据结构中,你每次都多做了一次加法!!!在 64 位系统下是   long long 相加,效率可想而知。

    谁终将声震人间,必长久深自缄默;谁终将点燃闪电,必长久如云漂泊。
  • 相关阅读:
    开始学习
    C# Excel批注“哪种开发语言最好”
    [LeetCode] Longest Substring Without Repeating Characters
    (Android 即时通讯) [悬赏],不管是谁发现一个漏洞奖励人民币1000元!
    10进制转16进制
    【2】按照Django官网,创建一个web app 创建app/创建相应的数据库表
    HTML5新特性之WebSocket
    Drupal 7模板(主题钩子)的建议
    检測磁盘驱动的健康程度SMART
    BZOJ2527: [Poi2011]Meteors
  • 原文地址:https://www.cnblogs.com/keximeiruguo/p/7679690.html
Copyright © 2020-2023  润新知