2044OI代码规范
前言#
2044 OI 代码规范(下面简称“规范”)为 2044 博客的所有题解、算法笔记等代码的标准,大家也可以以此规范作为参考。
本规范仅适用于 C++ 代码
对于变量和常量#
- 变量应当使用下划线命名,除题意说明外,应尽量减少毫无意义的变量名。
- 尽可能的减少全局变量的使用。
- 常量应该为全大写字母,并使用
const
定义。 - 除非数据范围需要,尽量减少对于
long long
等类型的使用。 - 应当为
bool
的变量尽量不用int
,long long
等类型。
符合规定的定义:
int age = 10;
bool gender = 1;
不符合规定的定义:
int hoheiheiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa = 114514;
long long age = 10;
对于函数与结构体#
- 函数的类型尽量不用
auto
关键字。 - 函数名与结构体名命名应使用下划线命名法或者大驼峰命名法。
- 函数(结构体)名应该可以表达它的意思,除题意说明,不应该使用毫无意义的函数(结构体)名。
- 函数最后应该有明确的返回值 (
void
类型除外)。 - 一个函数内代码量大于等于 行的单一功能代码块,应当抽象成函数。
符合规定的定义:
bool isprime(int n)
{
for (int i = 2; i < n; i++)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
不符合规定的定义:
auto f(double a, double b)
{
if (a % 2 == 0)
{
return b;
}
}
对于运算符#
- 双目运算符前后应当各有个空格。
- 单目运算符前应当有一个空格。
- 左括号前应当有一个空格。左括号有应当有一个空格。
- 右大括号应当独占一行。
- 左大括号要么独占一行,要么和上一行的最后一个符号,以空格隔开。
- 对于表达式里重复两次及以上的子表达式,应当用宏定义或者函数抽象出来。
符合规定的定义:
for (int i = 1; i <= n; i++)
{
if (!arr[i])
{
cout << i << " ";
}
else {
cout << i * i << " ";
}
}
不符合规定的定义:
for(int i=1;i<=n;i++){if(!arr[i]){cout<<i<<" ";}else{cout<<i*i<<" ";}}
其他规定#
- 无论缩进代码块有几行,都必须使用大括号并缩进。
- 头文件必须写在开头。
- 对于诸如
#ifdef DEBUG
的调试语句,之间的代码应当缩进。 - 最大缩进格数不应超过 ,极端情况下不能超过 ,最好不要超过 ,对于缩进格数较多的代码块,应使用提取函数、提前返回等手段减少缩进。
- 最后的成品代码应当删除用来调试的注释语句。
示范代码#
源自文章AT_abc057_d 题解,代码如下:
#include <algorithm>
#include <cstdio>
#include <iostream>
using namespace std;
long long YangHuiTraingle[55][55]; // 杨辉三角,排列组合用
void init()
{
YangHuiTraingle[0][0] = 1;
for (int i = 1; i <= 50; i++)
{
YangHuiTraingle[i][0] = 1;
for (int j = 1; j <= i; j++)
{
YangHuiTraingle[i][j] = YangHuiTraingle[i - 1][j] + YangHuiTraingle[i - 1][j - 1];
}
}
}
long long arr[114514];
int n, A, B;
long long average = 0.0; // 平均值
int main()
{
init();
cin >> n >> A >> B;
for (int i = 1; i <= n; i++)
{
cin >> arr[i];
}
// 排序,注意 greater要用 long long
sort(arr + 1, arr + n + 1, greater<long long>());
long long choose = 0; // 选择了多少元素?
long long choosebefore = 0; // 表示 k_1
long long chooseafter = 0; // 表示 k_2
for (int i = 1; i <= n; i++)
{
// 这是刚开始写错的,不用过多理会
if (choose < A)
{
average += arr[i];
choose++;
}
else if (choose > B)
{
break;
}
else if (choose >= A && arr[i] > average)
{
average += arr[i];
choose++;
}
}
for (int i = 1; i <= n; i++)
{
if (arr[i] == arr[A])
{
choosebefore++;
if (i <= A)
{
chooseafter++;
}
}
}
long long ans2 = 0;
if (arr[1] == arr[A])
{
for (int i = A; i <= B; i++)
{
ans2 += YangHuiTraingle[choosebefore][i];
}
}
else
{
ans2 += YangHuiTraingle[choosebefore][chooseafter];
}
printf("%.6lf\n%lld", (average / (double)(choose)), ans2);
}
作者:2044-space-elevator
出处:https://www.cnblogs.com/2044-space-elevator/articles/17982497
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!