${\color{Yellow}【}{\color{Yellow}置}{\color{Yellow}顶}{\color{Yellow}】}$编程技巧总结

  • 日期年份为人工置顶,请不要吐槽
  • 本文为博主原创,未经许可不得转载

编译与运行

创建run.bat并输入如下代码:

1
2
3
4
5
6
@echo off
set path=c:\mingw\bin
g++ -g 274.cpp -o 274.exe
if errorlevel == 1 goto :next
274.exe
:next

然后在终端中运行run即可

  

  

对拍

创建pai.bat并输入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@echo off
set path=c:\mingw\bin
g++ -g makedata.cpp -o makedata.exe
g++ -g 1.cpp -o 1.exe
g++ -g 2.cpp -o 2.exe
:loop
set path=c:\mingw\bin
makedata.exe
1.exe
2.exe
set path=c:\windows\system32
fc read1.out read2.out
if errorlevel == 1 pause
goto loop

  

  

开栈

1
2
3
4
5
6
7
//Windows下代码:
int __size__=20<<20;//20MB
char *__p__=(char*)malloc(__size__)+__size__;
__asm__("movl %0, %%esp\n"::"r"(__p__));
//linux下代码:
#pragma comment(linker, "/STACK:102400000,102400000")

  

  

常数优化

1、选几个主要的循环,定义循环变量为register int

2、循环中使用++i,而不是i++

3、循环展开,一般展开4层足矣

4、使用读入优化和输出优化

5、如果某些OJ不开O2的话,你可以使用如下代码强制开O2

1
#pragma GCC optimize("-O2")

6、取模运算建议这样写:(这样避免了使用long long以及尽量少的使用%符号

1
2
3
inline int add(int a,int b){return (a+=b)>=mod?a-mod:a;}
inline int sub(int a,int b){return (a-=b)<0?a+mod:a;}
inline int mul(int a,int b){return 1LL*a*b%mod;}

  

  

gdb调试

1
2
3
4
5
6
7
//在终端里运行:
$ gdb 文件名.exe
$ b 13 //在13行设置断点
$ r //运行至断点
$ n //单步跟踪
$ s //进入函数
$ p a //输出变量a的值
文章目录
  1. 1. 编译与运行
  2. 2. 对拍
  3. 3. 开栈
  4. 4. 常数优化
  5. 5. gdb调试
,