「置顶」fanhy的程序指南

这里总结了fanhy大部分的写程序的经验,供各位参考,也欢迎在评论区指出错误或不足。

Warning

  • 万bug之祖:数据范围
  • 三年OI一场空,不开longlong见祖宗。双倍空间无向图,下标溢出坟前哭。
  • 千万不要起重复的函数名,即使编译器成功编译了。
  • 千万不要把很多代码压成1行。
  • 千万不要跳着写代码,如果需要请在注释里写下TODO。
  • 千万不要依赖编译器的调试功能,调试时先重新阅读一遍代码。
  • 尽量不要起很短的变量名或函数名,自己要一眼能看懂。
  • 尽量不要把一个变量作两个用途,否则调试会很困难。
  • 边界一定写完整。
  • 递归时一定不能出现不return的情况。
  • 整篇代码统一设置从0或1开始,避免调试时不必要的麻烦。
  • getchar()注意吃换行。
  • 使用sort排序结构体时最好在结构体中重载>或<。
  • 易出错的函数:min(),max(),abs(),get(),gets(),memset().使用这些函数应当注意。

Reference

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//快读、快写模板
namespace IO {
char buf[110];
}

template <typename T>
inline void qr(T &x) {
char ch=getchar(),lst=' ';
while((ch > '9') || (ch < '0')) lst=ch,ch=getchar();
while((ch >= '0') && (ch <= '9')) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
if(lst == '-') x=-x;
}

template <typename T>
inline void write(T x,const char aft,const bool pt) {
if(x < 0) {putchar('-');x=-x;}
rg int top=0;
do {
IO::buf[++top]=x%10+'0';x/=10;
} while(x);
while(top) putchar(IO::buf[top--]);
if(pt) putchar(aft);
}