博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】C++ Interesting卡常数
阅读量:6967 次
发布时间:2019-06-27

本文共 1279 字,大约阅读时间需要 4 分钟。

转载自

C++ Interesting卡常数

作为一名OIer,在Noip中卡(kǎ 我就爱读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
恐怖啊!!!!

  1. 循环展开

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

  2. 取模优化(仅O2)
//设模数为 modinline 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;}//代替取模-
    1. 前置 ++

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

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

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

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

      数组在用方括号时做了一次加法才能取地址!

      所以在那些计算量超大的数据结构中,你每次都多做了一次加法!!!在 64 位系统下是   long long 相加,效率可想而知。

转载于:https://www.cnblogs.com/JCRL/p/9905099.html

你可能感兴趣的文章
ubuntu17 下phpstorm无法输入中文问题处理
查看>>
js事件跨浏览器解决问题的学习与总结
查看>>
我的友情链接
查看>>
服务器生成文件后,客户端直接响应下载
查看>>
我的友情链接
查看>>
域控之间角色转换(BDC转换为PDC)
查看>>
SCVMM 2012 R2运维管理十四之:VMM中网络概述
查看>>
多功能PCIE交换机之一:概述
查看>>
让IT工作者过度劳累的12个坏习惯
查看>>
关于bug分析与异常处理的一些思考
查看>>
MySQL 高可用架构在业务层面的分析研究
查看>>
微信关注即可使用 Wi-Fi,取消关注即断网的路由器实现的流程原理以及步骤
查看>>
怎样删除已经建立的VMWARE VSA群集
查看>>
linux 权限管理
查看>>
我的友情链接
查看>>
做事必须搞清10个顺序之我想1.职场:先升值,再升职!
查看>>
VMware vCenter 5.5 – You do not have permission to login to the server
查看>>
虚拟局域网(VLAN)
查看>>
Cgroup – Linux的IO资源隔离
查看>>
Java调用栈
查看>>