[整理]_ajthreac_的屑碼風(持續更新中)


注意:本文僅作為作者對於 OI 題的碼風留檔,不符合當今主流代碼規范也不夠易讀,您不需要也不應該學習此種碼風。
感覺自己的碼風還是比較獨特的,特此記錄一下。 ——\(2020.4.4\)
Update \(2021.7.26\): 微調了一些地方。
Update \(2021.4.18\): 微調了一些地方。
Update \(2021.3.8\): 大調了一些地方,學習某神仙更改了定義區。
Update \(2021.1.19\): 更改了縮進的長度。
Update \(2020.12.3\): 微調了一些地方。
Update \(2020.10.21\): 加入了命名模塊,微調了一些地方。
Update \(2020.8.10\): 微調了一些地方。
Update \(2020.6.30\): 微調了一些地方。
排版參照 Menci's Code Style for OI

約定

以下關鍵詞是按照必要性從高到低排序的:
必須 \(>\) 應該 \(>\) 盡量 \(>\) 可以 \(>\) 不建議 \(>\) 不應 \(>\) 不能

整體

開頭為頭文件區、定義區、IO 優化區(輸出優化不建議加入),以下是一段缺省源。必要時可在時空限制允許時 #define int LL

#include<bits/stdc++.h>
#define LL long long
#define dv double
#define il inline
#define us unsigned
#define eps 1e-6
#define INF 0x3f3f3f3f
#define ls k<<1
#define rs k<<1|1
#define tmid ((tr[k].l+tr[k].r)>>1)
#define nmid ((l+r)>>1)
#define pub push_back
#define pii pair<int,int>
#define mkp make_pair
#define x first
#define y second
#define KafuuChino return
#define HotoKokoa 0;
using namespace std;
il void Read(int &x){
  int f=1;x=0;char c=getchar();
  while(c<'0'||c>'9'){
    if(c=='-')f=-1;c=getchar();
  }
  while(c>='0'&&c<='9'){
    x=(x<<3)+(x<<1)+c-'0',c=getchar();
  }
  x*=f;
}

接下來是常量區,用 const 聲明的常量必須置於其他全局變量之前。
對於數組大小,應該使用 const int N=...;不應使用 #define N ...
常量區下方為聲明區,題目所用的全局變量、結構體、函數等應在此聲明並按照意義分隔。
函數聲明時必須實現。(即不出現 void f(...); ... void f(...){...} 的情況)
main 函數一定要在最后,整篇代碼不應有空行。

縮進

必須使用 \(2\) 空格縮進,不能使用制表符代替,縮進長度如下:
缺省源和定義區不能縮進。
函數、結構體等的定義、結尾大括號不能縮進。
函數、結構體等內部多縮進 \(2\) 空格。
ifelseforwhiledo-while 等引領的語句塊多縮進 \(2\) 空格。
例:

il void Floyd(){
  for(rg int k=1;k<=n;k++){
    for(rg int i=1;i<=n;i++){
      for(rg int j=1;j<=n;j++){
        if(f[i][j]>f[i][k]+f[j][k]){
          f[i][j]=f[i][k]+f[j][k];
        }
      }
    }
  }
}

大括號

ifelseforwhiledo-while 等引領的語句塊如果只有一行較短代碼(具體長度參照下文部分)則可以不加大括號直接寫。
其他情況必須加大括號,左大括號不能換行,右大括號應與對應左大括號所在行的縮進一致。
例:

for(rg int i=1;i<=n;i++)Read(a[i]);
for(rg int i=1;i<=m;i++){
  int u,v,t;
  Read(u),Read(v),Read(t);
  if(t==1)ade(u,v);
  else ade(u,v),ade(v,u);
}

空格

以下這些地方必須只加一個空格:

  1. 結構體名后方的左大括號前。
  2. else 后方的左大括號前。
  3. do-whiledo 后方的左大括號前。
  4. set<...>vector<...> 等容器類型與名稱之間。
  5. 指針符號 * 和引用符號 & 與變量類型之間。
    除此之外的其他地方,可不加空格的不能加多余的空格(例如:運算符兩側、逗號或分號后方等)。

語句塊內盡量少換行,每行長度不限,但要盡量可讀(此處“可讀”指一行代碼不超過100字符)。
需要在一行內寫下多個表達式時,必須使用逗號表達式(for 中的三個語句和變量聲明語句除外)。

命名

對於題中給出的變量,應在不重復的情況下盡量保持原樣。
函數名盡量使用帕斯卡命名法,數組名可以使用均為小寫字母的單詞縮寫。
臨時變量盡量使用單個小寫字母(如 i,j,k,x,y,u,v 等)。
習慣用法(如矩陣名 AE,手寫 minmax 等)可以保留。
當函數名出現全大寫縮寫緊跟開頭大寫時,為避免混淆可以在中間添加一個下划線。
例:

void GetMin(...){
  ...
}
int AVeryVeryVeryVeryVeryVeryLongFunction(...){
  for(rg int i=1;i<=n;i++){
    int u,v;Read(u),Read(v);
    ade(u,v),ade(v,u);
  }
}
void DFS_First(int u){
  ...
}

將作者寫 Markdown 和 \(\LaTeX\) 的碼風一並羅列至此。
規范大致同洛谷題解審核及反饋要求格式手冊,僅在一些細節上進行了微調。
對於 \(\LaTeX\) 公式中的轉義符號,有多種寫法的應該采取最短形式。
例:
應該使用 \ge不應使用 \geq 表示 \(\ge\)
應該使用 \|不應使用 \parallel 表示 \(\|\)
對於大型符號,盡量使用 \limits
例:盡量使用 \sum\limits_{i=0}^n \(\sum\limits_{i=0}^n\)不建議使用 \sum_{i=0}^n \(\sum_{i=0}^n\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM