tricks - 实现
负下标
有的时候我们需要存一些负的东西,比如我就只要一个 \(-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 - 实现的更多相关文章
- testng 教程之使用参数的一些tricks配合使用reportng
前两次的总结:testng annotation生命周期 http://www.cnblogs.com/tobecrazy/p/4579414.html testng.xml的使用和基本配置http: ...
- (转) 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 ...
- Matlab tips and tricks
matlab tips and tricks and ... page overview: I created this page as a vectorization helper but it g ...
- LoadRunner AJAX TruClient协议Tips and Tricks
LoadRunner AJAX TruClient协议Tips and Trickshttp://automationqa.com/forum.php?mod=viewthread&tid=2 ...
- 【翻译】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 ...
- 神经网络训练中的Tricks之高效BP(反向传播算法)
神经网络训练中的Tricks之高效BP(反向传播算法) 神经网络训练中的Tricks之高效BP(反向传播算法) zouxy09@qq.com http://blog.csdn.net/zouxy09 ...
- Hex-Rays Decompiler Tips and tricks Volatile memory
https://www.hex-rays.com/products/decompiler/manual/tricks.shtml First of all, read the troubleshoot ...
- hdu 5276 YJC tricks time 数学
YJC tricks time Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...
- 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( ...
- Git tricks: Unstaging files
NOTE: Following content is directly reprinted from http://andrewberls.com/blog/post/git-tricks-unsta ...
随机推荐
- ava基础MySQL存储过程 Java基础 JDBC连接MySQL数据库
1.MySQL存储过程 1.1.什么是存储过程 带有逻辑的sql语句:带有流程控制语句(if while)等等 的sql语句 1.2.存储过程的特点 1)执行效率非常快,存储过程是数据库的服 ...
- 关于eclipse反编译插件不起作用问题的解决
1.首先我的eclipse版本是 Version: Photon Release (4.8.0),小伙伴们可以通过 help>>About eclipse IDE 来查看自己的eclips ...
- 微信网页授权多次回调code请求
最近在做微信网页授权的时候遇到一个问题如果直接从后台把微信授权的url参数什么的拼装好,然后直接redirect 这个url 会导致时不时的多次请求回调的url .网上说是因为网络原因,如果10s没有 ...
- 在 ASP.NET Core和Worker Service中使用Quartz.Net
现在有了一个官方包Quartz.Extensions.Hosting实现使用Quartz.Net运行后台任务,所以把Quartz.Net添加到ASP.NET Core或Worker Service要简 ...
- 如何制作sitemaps网站地图
如何制作sitemaps网站地图 1.0 前言 1.1 xml格式 1.2 常见问题 本文资料来源于网站 1.0 前言 Sitemap 可方便网站管理员通知搜索引擎他们网站上有哪些可供抓取的网页.最简 ...
- Linux下安装Oracle11g服务器【转】
安装环境 Linux服务器:oracle linux 6.6 64位 Oracle服务器:Oracle11gR2 64位 系统要求 Linux安装Oracle系统要求 系统要求 说明 内存 必须高于1 ...
- 卷积神经网络学习笔记——Siamese networks(孪生神经网络)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 在整理这些知识点之前,我 ...
- Go语言从入门到放弃(设置 go get 为国内源)
前言 Go语言学到 Gin 框架了, 其实每天学习是比较辛苦的事情, 坚持下去! 在使用 Go 过程中发现, 最无奈的是Go的一些模块下不下来, 即便挂了V, 油管2k不卡的那种, 依旧是 time ...
- 【Spring】Spring 事务控制
Spring 事务控制 Spring 事务控制介绍 JavaEE 体系进行分层开发,事务控制位于业务层,Spring 提供了分层设计业务层的事务处理解决方案. Spring 的事务控制都是基于 AOP ...
- 在Linux系统下限制指定目录的大小以及文件/文件夹数量
背景说明 在Linux操作系统下有时需要限制一个指定文件夹的大小和文件夹内可存储的文件数量,有可能是出于安全的考量或者定制化的配置,这里我们提供了一种方案:用dd创建一个空的img镜像,进行格式化的配 ...