簡單介紹一下代碼風格ios
可能某ghj1222大佬看了會有些不舒服數組
#include<iostream> #include<cstdio> #include<algorithm>
include後面不習慣加空格網絡
頭文件儘可能簡短函數
using namespace std;
OI中能夠using stdui
const int maxn=1e5+5; int a[maxn];
定義數組空間必須使用const定義大小spa
inline lowbit(int x){return x&-x;}
簡短的函數可用inline內聯定義指針
typedef pair<int,int> pi;
長的類型名儘可能用typedef定義別名code
總之少用define多用const,typedef,inlineci
int main(){ return 0; }
大括號不需換行,簡短時可壓行編譯器
void func(int x){return x;}
不喜歡多餘的空格
int main(){ int n; cin>>n; for(int i=1;i<=n;++i){ cin>>a[i]; if(a[i]>0)ans++; } cout<<ans<<endl; return 0; }
int main(){ int n; cin>>n; for(int i=1;i<=n;++i){cin>>a[i];if(a[i]>0)ans++;} cout<<ans<<endl; return 0; }
我的習慣用++i
bool cmp(const int &a,const int &b){return a<b;}
用於比較的cmp函數必須加const和&(否則cena的垃圾編譯器會炸)
鏈式前向星習慣用指針寫(仍是指針和鏈表最配/網絡流除外)
struct ED{ int to; int dis; ED* nt; }; ED* head[maxn]; void add(int x,int y,int z){ ED* p=new ED; p->to=y;p->dis=z;p->nt=head[x];head[x]=p; }
λ表達式可站多行,也可壓爲一行
sort(a+1,a+1+n,[](const leizi &a,const leizi &b){return a.num<b.num;}); sort(a+1,a+1+n,[](const leizi &a,const leizi &b){ return a.num<b.num; }); while(l<r){ int mid=(l+r>>1)+1; if([](int x){ int pos=0,ans=0; for(int i=1;i<=n+1;++i){ if(a[i]-a[pos]<x){ans++;} else pos=i; } return ans<=m; }(mid))l=mid; else r=mid-1; }
對於複雜的類型可用auto自動識別(C++11)
void bfs(int s){ memset(vis_t,0,sizeof vis_t); queue<int>q; q.push(s); vis_t[s]=1; while(!q.empty()){ auto tp=q.front();q.pop(); for(auto i=head[tp];i;i=i->nt){ if(!vis_t[i->to]){ vis_t[i->to]=1; q.push(i->to); } } } }
本身寫的min和max最好放在namespace裏面
namespace cmp{ template<typename T>T min(const T &a,const T &b){return a<b? a:b;} template<typename T>T max(const T &a,const T &b){return a<b? b:a;} template<typename T>void minn(T &a,const T &b){if(b<a)a=b;} template<typename T>void maxx(T &a,const T &b){if(a<b)a=b;} }
指針類型最好用typedef定義別名(估計只有我纔會寫指針)
struct pt{ int siz; int cnt; int k; pt *fa; pt *ch[2]; }; typedef pt* ptr; ptr root; void build(ptr root){...}//或者 void build(ptr &root){...}
最後放篇代碼吧(luogu2296尋找道路)
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int maxn=1e4+5; const int maxm=2e5+5; struct ED{ int to; ED* nt; }; ED* head[maxn]; int n,m,s,t; int vis_f[maxn]; int vis_s[maxn]; int dis[maxn]; void add(int x,int y){ ED* p=new ED; p->to=y;p->nt=head[x];head[x]=p; } void bfs(int s){ memset(vis_f,0,sizeof vis_f); queue<int>q; q.push(s); vis_f[s]=1; while(!q.empty()){ auto tp=q.front();q.pop(); for(auto i=head[tp];i;i=i->nt){ if(!vis_f[i->to]){ vis_f[i->to]=1; q.push(i->to); } } } } int main(){ cin>>n>>m; for(int i=1;i<=m;++i){ int x,y; cin>>x>>y; if(x!=y){ add(y,x); } } cin>>s>>t; bfs(t); for(int i=1;i<=n;++i){ if(!vis_f[i]){ vis_s[i]=1; for(auto j=head[i];j;j=j->nt){ vis_s[j->to]=1; } } } cout<<[](){ queue<int> q; q.push(t); while(!q.empty()){ auto tp=q.front();q.pop(); for(auto i=head[tp];i;i=i->nt){ if(!vis_s[i->to]){ dis[i->to]=dis[tp]+1; vis_s[i->to]=1; q.push(i->to); } } } return dis[s]==0? -1:dis[s]; }()<<endl; return 0; }