人生如此复杂,机会多得像|

abensyl

园龄:2年1个月粉丝:2关注:4

代码风格

简单介绍一下我的代码风格。


头文件 & 宏定义

  1. 所有 #include 全部放在代码最开头,#define 紧随其后。

  2. 大部分情况下直接 #include<bits/stdc++.h>

  3. 大致使用到的宏定义如下,根据需要写其他的宏定义:

#define ll long long
#define ull unsigned long long
#define pii pair<int,int>
#define x first
#define y second
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pb push_back
  1. 如果题目有爆 long long 的风险,大部分情况下直接 #define int long long

名字空间 & 静态存储区变量声明

  1. 代码 using namespace std; 使用标准输入输出。

  2. 使用 const int 定义数组长度常量 NM 而非宏定义方式。

  3. 数组一般开在 main 函数外的静态存储区,如果使用大空间 stl(例如 vector 存图)一般开在 main 函数外。

  4. 变量与数组名称大部分时间采用英文单词或其缩写,少量使用汉语拼音首字母或汉字全拼,题目中给出的变量与数组尽可能与题面保持一致。

自定义函数

  1. 自定义函数如果没有递归或者循环在开头加 inline 优化。

  2. 函数名清晰易懂,与数组名规则类似。

  3. 传参时按实际需要进行引用和值传递。

  4. 如果需要用到 main 函数中的变量或者函数较短,通常写成 lambda 表达式的形式。

main 函数

  1. main 函数放在程序最末尾。

  2. main 函数最后要用 return 0 标致结束。

标点、换行与空格

  1. 不添加多于换行和空格。

  2. 如果前后两则语句关系密切,用 , 隔开,否则用 ; 隔开。

  3. 如果前后两则都较短,可以考虑写入同行。

花括号

  1. 左花括号与前面的语句同行,用空格隔开。

  2. 右花括号与后面语句同行,用空格隔开。

  3. 如果语句仅有一行或无需分号隔开,不使用花括号。

实例:

int mx=0,cnt=0;
for(int i=1;i<=n;++i) {
    if(a[i]==mx) cnt++;
    else if(a[i]>mx) mx=a[i],cnt=1;
} cout<<mx<<' '<<cnt<<'\n';

其他

  1. 数组使用时主要采取 1-index(下标从 \(1\) 开始)。

  2. 写代码时如果遇到一些复杂的内容或者易错点(例如 dp 阶段的划分),用必要的注释提醒自己。


本人喜欢比较密集的代码,与诸位可能审美存在一定差异。
本文仅代表个人的代码风格。


最后放一个 csp-s 2024 超速检测的赛事代码,感受一下我的代码风格。

#include<bits/stdc++.h>
#define int long long
#define ll long long
#define ull unsigned ll
#define rep(i,a,b) for(int i=a;i<=b;++i)
#define per(i,a,b) for(int i=a;i>=b;--i)
#define pii pair<int,int>
#define x first
#define y second
#define pb push_back
#define all(v) v.begin(),v.end()
#define lbt(i) (i&-i)
using namespace std;
const int N = 1e5+5, mod = 998244353, M = 1e6+5;
// be careful with multiple cases
struct cars {
    ll d,v,a;
    pii qj;
} c[N];
int p[N];
vector<pii> vc;
void solve() {
    vc.clear();
    // first check the init.
    ll n,m,l,vmx;
    cin>>n>>m>>l>>vmx;
    auto mcl = [&](ll a,ll b) -> ll {
        return (a+b-1)/b;
    };
    auto cal = [&](ll d,ll v,ll a) -> pii {
        if(a==0) {
            if(v>vmx) return {d,l};
            return {-1,-1};
        } if(a>0) {
            if(v>vmx) return {d,l};
            // v <= vmx, a > 0
            ll pos=(vmx*vmx-v*v)/(2ll*a);
            if(d+pos+1>l) return {-1,-1};
            return {d+pos+1,l}; 
        }
        if(v<=vmx) return {-1,-1};
        // v > vmx, a < 0
        ll pos=mcl((v*v-vmx*vmx),(-2ll*a));
        return {d,min(l,d+pos-1)};
    };
    rep(i,1,n) {
        cin>>c[i].d>>c[i].v>>c[i].a;
        c[i].qj=cal(c[i].d,c[i].v,c[i].a);
        // cout<<c[i].qj.x<<' '<<c[i].qj.y<<'\n';
    }
    rep(i,1,m) cin>>p[i];
    auto fmin = [&](int id) -> int {
        auto tt=lower_bound(p+1,p+m+1,id)-p;
        return tt;
    };
    auto fmax = [&](int id) -> int {
        auto tt=upper_bound(p+1,p+m+1,id)-p-1;
        return tt;
    };
    rep(i,1,n) {
        int st=c[i].qj.x,ed=c[i].qj.y;
        if(st==-1) continue;
        int s=fmin(st),t=fmax(ed);
        if(s>t) continue;
        vc.pb({s,t});
    } cout<<vc.size()<<' ';
    int res=0,now=0;
    sort(all(vc),[&](pii a,pii b){return a.y<b.y;});
    for(auto c:vc) {
        int st=c.x,ed=c.y;
        if(now<st) res++,now=ed;
    } cout<<m-res<<'\n';
}
signed main() {
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    int T; cin>>T;
    while(T--) solve();
    return 0;
}

本文作者:abensyl

本文链接:https://www.cnblogs.com/abensyl/articles/18564026

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   abensyl  阅读(11)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起