lmy-1st-Code-Style-Standard

头文件

  • 万能头文件
#include <bits/stdc++.h>
  • 有时使用宏定义的语句
#define pb push_back
#define rp(i,1,n) for(int i=1;i<=n;i++)
  • 宏定义的数字严格大写
#define MOD 998244353
#define MAXN 200010

括号

  • 大括号不换行
for(int i=1;i<=n;i++){
    // do something
}
  • 当大括号里的语句只有一条,或几条语句有连贯性且较为短小时,选择不使用大括号,并接着大括号前的语句
for(int i=1;i<=n;i++)cin>>a[i];
if(a>b)a=tmp,a=b,b=tmp;

循环

  • 循环从1开始,使用<=<=,当为11~n1n-1时使用<n<n,使用i++(编译器比人聪明
for(int i=1;i<=n;i++)
for(int i=1;i<n;i++)
  • 较为偏向于for循环而不是while
for( ; ; ;)

缩进

  • 二格或四格缩进都可,主要偏向四格,二格看着比较tourist风格(
  • 使用Tab而不是空格缩进

常规

  • 不必加空格的地方尽量不加空格,有时为了代码方便调试会空一行
  • 数组全局定义,使用宏定义的MAXN
  • 选择 cin或cout,有时会写读入优化
  • 宏定义里#define endl \n
  • 宏定义ll而不是直接使用long long
  • 会写 using namespace std;
  • 自定义的namespace里不用缩进
namespace xxx{
int a,b,c;
//do something...
}
  • bool函数里使用true或false,但在if语句里,使用0或1或!
bool judge(){
    return true/false;
}
if(!judge()) / if(judge()==0)
  • 使用%2==1或&1
  • 在线段树中,不使用2*22+1*2+1
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
  • 不使用 C++11 的东西,考试不能用
  • 一些比较模板的东西会压行压的很彻底
void add_edge(ll u,ll v){
    edge[++tot].nxt=head[u];edge[tot].to=v;head[u]=tot;
    edge[++tot].nxt=head[v];edge[tot].to=u;head[v]=tot;
}
ll gcd(ll a,ll b){ll r;while(b>0){r=a%b;a=b;b=r;}return a;}

其他的还有快速幂之类的