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)...

  1. 取模优化(仅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;}//代替取模-
  1. 前置 ++

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

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

  2. if()else语句比()?()

    Interesting卡常数的更多相关文章

    1. CF 86D 莫队(卡常数)

      CF 86D 莫队(卡常数) D. Powerful array time limit per test 5 seconds memory limit per test 256 megabytes i ...

    2. NOIP卡常数技巧

      NOIP卡常数技巧 https://blog.csdn.net/a1351937368/article/details/78162078 http://www.mamicode.com/info-de ...

    3. ACM卡常数(各种玄学优化)

      首先声明,本博文部分内容仅仅适用于ACM竞赛,并不适用于NOIP与OI竞赛,违规使用可能会遭竞赛处理,请慎重使用!遭遇任何情况都与本人无关哈=7= 我也不想搞得那么严肃的,但真的有些函数在NOIP与O ...

    4. HDU 6211 卡常数取模 预处理 数论

      求所有不超过1e9的 primitive Pythagorean triple中第2大的数取模$2^k$作为下标,对应a[i]数组的和. 先上WIKI:https://en.wikipedia.org ...

    5. 【UER #1】DZY Loves Graph(待卡常数)

      题解: 正解是可持久化并查集 但这个显然是lct可以维护的 但这常数是个问题啊??? #include <bits/stdc++.h> using namespace std; struc ...

    6. HDU-5373-水题-卡常数时间

      姿势就是力量啊! 第一次意识到long long 比 int要慢很多.当时想到了各种优化仍然TLE,最后也没A出来,就是用了long long #include <cstdio> #inc ...

    7. bzoj3815: 卡常数

      随机数据,带修改,求到空间中到给定点距离为给定值的点的编号,唯一解. 建三维kdtree,对查询用可行性剪枝在树上找,由于数据随机,插入删除时不需要维护平衡. #include<bits/std ...

    8. Vijos p1892 树上的最大匹配 树形DP+计数 被卡常我有特殊技巧heheda

      https://vijos.org/p/1892 此题需要手动开栈: <<; //256MB char *p=(char*)malloc(size)+size; __asm__(" ...

    9. OI中卡常数技巧

      一.I/O优化 读入优化是卡常数最重要的一条! inline int read() { ,f=;char c=getchar(); ;c=getchar();} +c-';c=getchar();} ...

    随机推荐

    1. Android项目-高考作文-抽象BaseAdapter

      1, 在使用baseAdapter的时候,总是有需要重复的代码如: @Override public int getCount() { return list.size(); } @Override ...

    2. 尚学堂马士兵struts2 课堂笔记(四)

      27 结果类型 主要就四种种 dispatch和rediret chain和drdirectaction <package name="resultTypes" namesp ...

    3. Android(Lollipop/5.0) Material Design(二) 入门指南

      Material Design系列 Android(Lollipop/5.0)Material Design(一) 简介 Android(Lollipop/5.0)Material Design(二) ...

    4. Java进阶(二十七)使用Dom4j解析XML文件

      使用Dom4j解析XML文件 写在前面的话 由于论文实验要求,需要实现操作XML文档,为此想到了dom4j这个工具,使用之后深感受益.在此分享给大家,以此共勉. 注:本文转载自http://blog. ...

    5. 学习pthreads,使用互斥量进行同步

      在进行多线程编程时,我们总会遇到全局变量和数据结构的问题,这是多线程之间进行通信的问题.如果多个线程同时读写一个全局变量,那么会造成竞争或者出错.为了解决这一问题,我们需要对全局数据进行,使用互斥量实 ...

    6. Leetcode_111_Minimum Depth of Binary Tree

      本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41964249 Minimum Depth of Binar ...

    7. Android StringEntity() 和 UrlEncodedFormEntity() 的区别

      今天在做安卓客户端向服务器提交数据的过程中,在组织POST数据时,用了UrlEncodedFormEntity()这个方法,但是后台报错,说是无法解析json内容. 按照本来的想法,向后台发送的是 j ...

    8. VS2010安装Boost库

      source URL: http://stackoverflow.com/questions/2629421/how-to-use-boost-in-visual-studio-2010 While ...

    9. Android listView异步下载和convertView复用产生的错位问题

      1:Item图片显示重复 这个显示重复是指当前行Item显示了之前某行Item的图片. 比如ListView滑动到第2行会异步加载某个图片,但是加载很慢,加载过程中ListView已经滑动到了第14行 ...

    10. SpartanBrowser产品和安全特性简介

      v:* { } o:* { } w:* { } .shape { }p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-botto ...