调试 & 常数优化:我有特别的 debug 技巧
rxz 的调试技巧(https://www.zhihu.com/question/60719584/answer/179363450):
#define DEBUG printf("Passing [%s] in LINE %d\n",__FUNCTION__,__LINE__)
C++ 的一个特性:
由于 C++ 中 a[b] = *(a+b) = *(b+a) = b[a],
因此你可以用 i[a] 代替 a[i],用 1[b] 代替 b[1],多维数组同样可以,你甚至可以用 5[4[3[2[1[a]]]]] 代替 a[1][2][3][4][5]。
用处,混乱代码 233。—— immortalCO(https://www.zhihu.com/question/49272859/answer/115277716)
Fast I/O:
inline int read() { // 快读
int X=,w=;
char ch=;
while(!isdigit(ch)) {
w|=ch=='-';
ch=getchar();
}
while(isdigit(ch)) X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
inline double dbread() { // 小数快读
double X=,Y=1.0;
int w=;
char ch=;
while(!isdigit(ch)) {
w|=ch=='-';
ch=getchar();
}
while(isdigit(ch)) X=X*+(ch^),ch=getchar();
ch=getchar();
while(isdigit(ch)) X+=(Y/=)*(ch^),ch=getchar();
return w?-X:X;
}
inline void write(int x) { // 快些
if(x<) putchar('-'),x=-x;
if(x>) write(x/);
putchar(x%+'');
}
Fast Read 2
inline int read(){
RR int x;RR bool f;RR char c;
for (f=; (c=getchar())<''||c>''; f=c=='-');
for (x=c-''; (c=getchar())>=''&&c<=''; x=(x<<)+(x<<)+c-'');
return f?-x:x;
}
strtol,strtoll 的用法(http://www.cnblogs.com/the-tops/p/5799547.html):
名字: strtol, strtoll, strtoul, strtoull
convert a string to a (signed, unsigned ) long integer string
声明:
#include<stdlib.h> ( 这个是C标准库,与linux无关。这套函数是通用的。)
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);说明,第一个参数 nptr是要转化的字符串。第三个参数base说明nptr的进制。base 取值范围 0,2-36
这几个函数会忽略nptr前面的空格( ' ', '\t', '\n' '\f', '\v' '\r' ,由isspace判定为真的字符)
while (*nptr && isspace ( *nptr ) ) ++ nptr;然后 遇到非合法字符结束;
base = 2; 合法字符为0, 1
base = 3; 合法字符为0,1, 2
...
base = 11; 合法字符为0,1,...,9,a(A)
...
base = 36;合法字符为0, 1, ...,9,a(A),...,z(Z)。
字符 a-z,是忽略大小写的,混着来也行,例如 strtol("aA", NULL, ) 依然能得到正确的结果。
函数的第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。
如果没有合法字符,则 *endptr = nptr ,函数返回0.
例如:
1.
char *endptr;
char nptr[]="123abc";
int ret = strtol(npstr, &endptr, );由于10进制里没有“数字”a,所以扫描到a,结束。
这样 ret = ;
endptr = &nptr[]; ( printf("%s", endptr); 将得到字符串 abc )
2.
char nptr[]=" \n\t abc";
int ret = strtol(nptr, &endptr, );由于函数会忽略nptr前面的空格(' ', '\n'...),所以,从字符a开始扫描,但是遇见的“第一个”即是不合法字符。
所以函数结束。 ret=; endptr = nptr;
以下的讨论,会认为 nptr 前面没有空格,
即执行过类似于 while (*nptr &&isspace ( *nptr ) ) ++ nptr;
如果base 为0.则分3种情况:
如果nptr 以0x(零x)开头,则把nptr当成16进制处理。
如果npstr以0(零)开头,则把nptr当成8进制处理。
否则,把nptr当成10进制。
对于函数执行错误,如传了一个非合法base,则errno会设置相关值
—— http://zengwu3915.blog.163.com/blog/static/27834897201262562912597/
奇♂技淫♂巧。。。
最新文章
- 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章
- pdf拆分与合并
- 偶然翻出很久很久以前写的一款sqlmap UI,有点年头了
- 新装ubuntu12.04需要敲的命令集合
- poj 2945 trie树统计字符串出现次数
- UBI FAQ and HOWTO
- 【转】C++的面象对象总结
- Spring 设置readonly 事务只读模式
- 9. 使用ZooKeeper Java API编程
- Linux Vim查找字符串
- R语言-逻辑回归建模
- Django中ORM操作
- 消息中间件 rabbitMQ
- socket.io的websocket示例
- $_SERVER[&#39;HTTP_REFER&#39;] 和 session cookie 关系
- python slots
- CentOS 7 系统的初化始配置
- 深度学习:浅谈RNN、LSTM+Kreas实现与应用
- web.config中的InProc模式 与 StateServer模式[转]
- 常用OLAP引擎
热门文章
- R语言中的几种数据结构
- vue-methods方法与computed计算属性的差别
- 20190905 Lombok常用注解
- 13 (H5*) JS第三天 数组、函数
- “希希敬敬对”团队--‘百度贴吧小爬虫’Alpha版本展示博客
- vs2015上编译QT程序的环境搭建
- shutdown的几种方法和利弊
- 入门级,关于下载设置wamp的安装
- 从安装linux(centos7.6)系统到部署springboot java程序到k8s(大纲)
- P1973 [NOI2011]Noi嘉年华