笔记总页面

负下标

有的时候我们需要存一些负的东西,比如我就只要一个 \(-1\),或者说值域是 \([-10^6,10^6]\),而我懒得写平移

(写平移不仅麻烦,而且万一忘了就会RE,并且在本地不一定会被检测出来)

那咋整呢?

取下标:a[i],它的本质是 *(a+i)

开一个pool,然后开一个指针a指向pool+1,就可以访问 a[-1] 了

关于二维数组:

二维数组事实上是把每一行串起来变成一维数组存储的

所以说,比如你开了一个 int a[10][10],访问 a[2][-1] 等价于 a[1][9]

然后我们只需要开一个 p,指向二维数组的一行;然后就可以访问 p[-1][-1] 这样的下标了

那么二维数组的“一行”,是什么类型呢?实际上,是 int (*p)[10] 的类型。也许你在传函数参数的时候就注意到了,传数组的时候,第一维可以不限,但是后面必须要限制。这里也是一样的。

int (*p)[10] 只是一个特例,你可以把 10 换成任意数,但是要保持和你开的第二维相同。另外,由于优先级问题,这里的括号不能省略。

以下是一个例子,使得你可以访问 a[-100~100][-100~100]

int pool[202][202];
int (*a)[200]=pool[101];

为什么要多开两个呢?注意到 a[100-100][-1] 是不被允许的,所以 a 必须指向第 101 行,此处要躲开一个;后面要访问到 a[101+100=201],而此时我们才开了 201 行,那肯定不行,所以要开到 202

在不造成太多浪费的情况下,多开一两个保安全还是不错的。

动态开点

固然可以写一个映射函数,如

#define id(x,y) (x-1)*m+y

事实上,为了好看,与节省空间,可以这样写

int id[N][N],tot=0;
for(int i=1;i<=n;++i) for(int j=1;j<=m;++j) id[i][j]=++tot;

也就是每次用 ++tot 来开点。这样更加的灵活,易懂(因为数组有名字)(当然函数也有名字,但是括号和中括号混合在一起闲的很乱,全都是中括号则很整齐)

节省空间是因为,有的时候你为了使映射函数好写,可能会浪费一些区间。

当然映射函数也有它的好处,比如数组开不下的时候映射函数就可以派上用场了。当然,为了可读性,也可以用map,如果必要。

花括号

不管是否换行与否,尽量不要省略花括号,如:

if (...) do_something

应该写作

if (...)
{
do_something;
}

尽管只是很简单的一句话。因为这样不费很多力气,而且方便后期加入功能,与调试。

而且看起来很整齐,强迫症狂喜

tricks - 实现的更多相关文章

  1. testng 教程之使用参数的一些tricks配合使用reportng

    前两次的总结:testng annotation生命周期 http://www.cnblogs.com/tobecrazy/p/4579414.html testng.xml的使用和基本配置http: ...

  2. (转) How to Train a GAN? Tips and tricks to make GANs work

    How to Train a GAN? Tips and tricks to make GANs work 转自:https://github.com/soumith/ganhacks While r ...

  3. Matlab tips and tricks

    matlab tips and tricks and ... page overview: I created this page as a vectorization helper but it g ...

  4. LoadRunner AJAX TruClient协议Tips and Tricks

    LoadRunner AJAX TruClient协议Tips and Trickshttp://automationqa.com/forum.php?mod=viewthread&tid=2 ...

  5. 【翻译】C# Tips & Tricks: Weak References - When and How to Use Them

    原文:C# Tips & Tricks: Weak References - When and How to Use Them Sometimes you have an object whi ...

  6. 神经网络训练中的Tricks之高效BP(反向传播算法)

    神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 ...

  7. Hex-Rays Decompiler Tips and tricks Volatile memory

    https://www.hex-rays.com/products/decompiler/manual/tricks.shtml First of all, read the troubleshoot ...

  8. hdu 5276 YJC tricks time 数学

    YJC tricks time Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  9. 10 Interesting Linux Command Line Tricks and Tips Worth Knowing

    I passionately enjoy working with commands as they offer more control over a Linux system than GUIs( ...

  10. Git tricks: Unstaging files

    NOTE: Following content is directly reprinted from http://andrewberls.com/blog/post/git-tricks-unsta ...

随机推荐

  1. 7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format

    目录 ✍前言 版本约定 ✍正文 DateFormat:日期时间格式化 SimpleDateFormat NumberFormat:数字格式化 DecimalFormat 一.0和#的使用(最常见使用场 ...

  2. docker 使用教程1

    1.概念理解 镜像:docker镜像就像一个个模具. 容器:docker容器就是模具翻模出来的东西. 仓库:仓库就是存放模具的地方. 下面通过运行 hello-world 来理解 docker镜像运行 ...

  3. git pull 和git fetch的区别

    git pull 是上下文环境敏感的,它会把所有的提交自动给你合并到当前分支当中,没有复查的过程 而git fetch只是把拉去的提交存储到本地仓库中,真正合并到主分支中需要使用merage head ...

  4. 第四章节 BJROBOT 线速度校正 【ROS全开源阿克曼转向智能网联无人驾驶车】

    BJROBOT 线速度校正   1.把小车平放在地板上,用卷尺作为测量刻度,选取车头或者车尾处作为小车的起点, 打开资料里的虚拟机,打开一个终端 ssh 过去主控端启动 roslaunch znjro ...

  5. Java 双端队列接口 Deque

    Deque 是一种支持在两端进行操作的线性结构,包含了栈和队列的功能.Java 中建议使用 Dqueue 的实现来替代遗留的 Stack 类.本文将介绍 Deque 提供的主要 API. 双端操作 A ...

  6. ruby+watir安装指南

    安装ruby+watir一共需要下面几个步骤 1. 安装ruby: 2. 升级Rubygems:Rubygems(简称 gems)是一个用于对 Ruby组件进行打包的 Ruby 打包系统. 它提供一个 ...

  7. MyBatis 查询的时候属性名和字段名不一致的问题

    目录 问题 解决方案:resultMap 问题 当我们数据库中的字段和实体类中的字段不一致的时候,查询会出问题 数据库字段是 pwd id name pwd 1 张三 123456 2 李四 1234 ...

  8. SSTI

    最牛bypass:https://blog.csdn.net/solitudi/article/details/107752717 SSTI的奇怪绕过姿势:https://blog.csdn.net/ ...

  9. 【九阳神功】Nessus 8_VM不限IP及AWVS破解版合体部署

    Nessus 8下载地址: https://moehu-my.sharepoint.com/personal/ximcx_moebi_org/_layouts/15/download.aspx?Sou ...

  10. dblink查找对应的目标端session

    v$session试图中process字段代表的是客户端所在机器的进程号 例如我使用toad连接数据库,查询到的process即toad的进程号 SELECT process FROM V$SESSI ...