一、为什么要卡常数?

  • OI中数据结构与常数优化关系很大的
  • 如果你常数好可以暴力过数据结构题啦~
  • 如果你常数不好即使复杂度一样也会被出题人卡~

二、常用的卡常数方法

1、卡IO(输入输出)

比较简单的写法:

int readint(){int op=1,x=0;  char ch=getchar();while(ch<'0' || ch>'9'){if(ch=='-')op=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return op*x;
}
void outint(int x){if(x<0){putchar('-');x=-x;}if(x>9)outint(x/10);putchar(x%10+'0');
}

比较奇怪的写法

mmap

2、卡编译

2.1 C++内联函数inline

由编译器在编译时会在主程序中把函数的内容直接展开替换,减少了内存访问。(如果是递归可能会展开前几层的运算吧?)

int max(int a, int b){return a>b?a:b;}//原函数
inline int max(int a, int b){return a>b?a:b;}//前面直接加inline就好了。
2.2 CPU寄存器变量register

对于一些频繁使用的变量,可以声明时加上该关键字,运行时可能会把该变量放到CPU寄存器中,只是可能,不保证有效。特别是你变量多的时候,一般还是丢到内存里面的。
比较下面两段程序:

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


3、卡计算

3.1 取模优化
占坑待填,据说 https://loj.ac/article/327
3.2 加法优化

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

3.3 数组优化

1、不要开bool,所有bool改成char,int是最快的(原因不明)。
2、在最大值50000*50000的时候用unsigned代替long long
3、对于多维数组,用到乘法优化寻址

// Code A
for(i=1;i<=n;i++)ans+=A[x][y][z][i];
// Code B
int *p=A[x][y][z];
for(i=1;i<=n;i++)ans+=*(p+i);
3.4 判断优化

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

3.5 结构优化

1.如果你要经常调用a[x],b[x],c[x]这样的数组,把她们写在同一个结构体里面会变快一些,比如f[x].a, f[x].b, f[x].c
2.指针比下标快。

3.7 欢迎补充

4、卡算法/预处理

4.1 STL优化

STL非常慢,可以手写。

4.2 倍增优化

倍增表小的开前面——寻址会变快很多

4.3 Floyd初始化
for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)gra[i][j]=inf
for(int i=1;i<=b;i++)gra[i][i]=0

是比

for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){if(i==j) gra[i][j]=0;else gra[i][j]=inf}    

快80%以上的,,因为要每次去比较。

4.4 循环展开

自己感受。。。

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;
}
4.5 占坑待填。

转载于:https://www.cnblogs.com/gwj1314/p/9444878.html

简单的卡常数【OI缩水版】相关推荐

  1. 【基础】算法时空复杂度【OI缩水版】

    一.时间复杂度 (1s10^7, 各种复杂度对应数据规模,对应算法.) 二.空间复杂度 (数组大小) 三.算法复杂度分析 (常规,主定理)

  2. STL算法入门基础【OI缩水版】

    2018.5.21 文章比较长,写的也比较垃圾,而且还没写完,超级占坑... 推荐选择性阅读您需要的,或者直接看最后的参考链接,指向其他大佬的博客. 0x00 前言 Standard Template ...

  3. 代码调试技巧【OI缩水版】

    1 小黄鸭调试法 来自维基:小黄鸭调试法是软件工程中使用的调试代码方法之一. 就是在程序的调试.纠错或测试过程中,耐心地向小黄鸭解释每一行程序的作用,以此来激发灵感. 2 输出中间值 在关键位置输出值 ...

  4. 简单网页设计之表格版

    简单网页设计之表格版 <html> <meta http-equiv=Content-Type content="text/html; charset=UTF-8" ...

  5. uniapp(H5) + signalr 制作的简单的卡牌游戏

    在闲暇之余用几天时间和后台一起写了一个简单的卡牌游戏,里面有一些uniapp+signalr 的用法 项目地址 效果展示 1.玩家一创建并加入房间 2.创建玩家二玩家三并加入房间 3.玩家就绪房主开始 ...

  6. 设计模式之简单工厂模式(C#版)

    设计模式之简单工厂模式(C#版) 简介 假设有个女朋友 总结 简介 我用最简洁而直接的方式来描述一下,什么是简单工厂模式.一句话就是,工厂类使用switch case语句返回特定类型. 下面,我们用一 ...

  7. 简单音乐铃声(接口版)

    简单音乐铃声(接口版) 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.样式 二.使用步骤 1.创建Ui 2.读入数据 前言 综合UI设计.数据接收.Activi ...

  8. macos安装盘第三方工具制作_简单制作OSXYosemite10.10正式版U盘USB启动安装盘方法教程(全新安装Mac系统)下载|异次元软件世界...

    伴随着 iMac 5K Retina 和新的 Mac mini 等硬件的发布,苹果终于都推出了 OS X Yosemite 系统正式版了!相信很多人都已经用上.不过对于一些不想升级,而是打算「全新安装 ...

  9. physx选择显卡还是cpu_99块钱买啥显卡?PUBG吃鸡60fps+的缩水版“GTX1050”3GB游戏实测...

    Tony哥的玩卡日记 GTX1050?3GB?99块钱?(╯‵□′)╯︵┻━┻ 99块钱现在能买到什么显卡呢?GTX650 1GB现在貌似都涨到120了,70块钱能买到GTS450或者HD5770.H ...

最新文章

  1. iPhoneX-关于底部的那个一个横条的问题
  2. 为什么(#39;b#39;+#39;a#39;+ +#39;a#39;+#39;a#39;)。toLowerCase()#39;banana#39;的结果?
  3. 1核1g服务器开多少虚拟主机,1核1g服务器开多少虚拟主机
  4. search Paths $(SRCROOT)和$(PROJECT_DIR)区别
  5. c++ 使用未初始化的内存_C语言内存分布(内核区、堆栈区等)
  6. 《CLR Via C# 第3版》笔记之(二十一) - 异步编程模型(APM)
  7. 聚类分析软件测试,文本聚类分析效果评价笔记 - hellominefriend的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  8. sis地址发布器_【一起练翻译-9.1】关于提词器、真实、川普和演讲
  9. 期货高手的交易方法总结,
  10. 命令行窗口光标消失问题解决
  11. vivo手机计算机怎么开语音,vivo怎么打开语音助手
  12. python 初学之环境配置及IED搭建
  13. windows下AS常用快捷键
  14. 股票市场交易中的强化学习
  15. 详解变频器、逆变器工作原理
  16. c语言移动光标到指定坐标,C语言实现光标移动
  17. 复制html代码怎么粘贴快捷键,电脑复制粘贴快捷键,教您电脑怎么用键盘复制粘贴...
  18. Vmware Esxi在线管理虚拟机
  19. 生鲜配送系统软件排名
  20. python round_Python3 round() 函数

热门文章

  1. 多元微积分_闭合路径线积分实例
  2. Matlab BP神经网络拟合四足机器人足端轨迹线积分方程反函数用于足端轨迹规划
  3. java实现对rar文件和zip文件的解压缩
  4. ANSYS2021安装过程问题总结
  5. 【常见电路】稳压电路以及元器件的选型
  6. 来CSDN两年了,发现一些CSDN网页的BUG
  7. python 数据类型转换 及 字符串 转int 报错处理
  8. 爬取糗事百科上的照片
  9. CSS color中常用英文色值
  10. oracle数据库优化-IO性能分析优化