大家都在写,跟风。

头文件

万能头。因为我刚学 OI 的时候怎么都背不住 algorithm 怎么拼(

变量

数组开全局,一些前后重名/只在某一部分用的变量开局部。

尽量不使用指针/ stl 迭代器等神秘语法。

换行

大括号通常换行。

几个语句意义连续,全屏模式下总长度不超过屏幕长度一半,全部写在一行,用逗号连接。

意义不连续但长度较短,全部写一行,不连续的地方写分号,分号后面加空格。

如:now[v]=head[v],dis[v]=dis[u]+1; q.push(v);

函数只有一行内容,但长度超过屏幕一半,大括号不换行;结构体内容不超过两行,大括号不换行。如:

void add(int u,int v,int w){
e[++cnt]={head[u],v,w};head[u]=cnt;
}

代码较长时,属于不同算法的函数之间空一行,有时会在空行注释算法名称。

不使用 return q.push(v),void(); 等影响理解的压行。

空格

运算符之间全部不加空格。

int &x;int *y 而不是 int& x;int* y。

if/for/while 后面语句如果不换行,) 后要加空格。

输入输出

整数用快读,字符串/浮点用 scanf,单个字符用 cin。

题目要求的输出用 printf,调试输出用 cout。

注:2022.11 及以前,读入用 scanf,输出用 cout。所以模板专区可能会看到一些此类代码(

痛改前非的原因是 CSP T2 写 cout<<endl 自测被各大 OJ 卡惨了/kk

命名习惯

根据用途命名。

不知道怎么起名字的就叫 qwq/qaq/QAQ。此类变量一份代码里不能出现三个及以上。

命名相近/意义相近导致容易混的,在变量旁边打注释。

多个相近名字/变量如果后面加数字区分,要全部带数字。如两个 dfs 函数,不能叫 dfs 和 dfs1,而要叫 dfs1 和 dfs2。(是个惨痛的教训()

喜欢把 pair<int,int> define 成 pii。

目测时限空限不紧的时候会 define int long long。

否则 define LL long long。

其他

让我想想还有啥。

代码在 c++98 基本都能过编,链前除外。

不会任何神秘语法。

void 最后不写 return,main() 最后要写 return 0。

对于注释的斜杠打在行首还是与缩进位置保持一致不作要求。

四格缩进,缩进要对齐。

尽量不动快读上面的部分,const 和 define 之类通常写在快读下面。

不喜欢一堆 define 贴在一起,按用到的时间分散到代码各处。

最近正在尝试养成写 inline 的习惯。

while(1) 喜欢写成 while("qwq")。

Example

随便找了个长一点的代码。

#include<bits/stdc++.h>
#define il inline
using namespace std;
il int read()
{
int xr=0,F=1; char cr=getchar();
while(cr<'0'||cr>'9') {if(cr=='-') F=-1;cr=getchar();}
while(cr>='0'&&cr<='9')
xr=(xr<<3)+(xr<<1)+(cr^48),cr=getchar();
return xr*F;
}
const int N=1e5+5;
int n,L,R;
struct edge{
int nxt,to;double w;
}e[N<<1];
int head[N],cnt;
il void Add(int u,int v,double w){
e[++cnt]={head[u],v,w};head[u]=cnt;
}
namespace seg
{
#define ls (now<<1)
#define rs (now<<1|1)
#define mid ((l+r)>>1)
double tr[N<<2],lz[N<<2];
il void push_down(int now)
{
tr[ls]+=lz[now],tr[rs]+=lz[now];
lz[ls]+=lz[now],lz[rs]+=lz[now];
lz[now]=0;
}
il void push_up(int now) {tr[now]=max(tr[ls],tr[rs]);}
void modify1(int now,int l,int r,int ml,int mr,double k)
{
if(l==ml&&r==mr) {tr[now]+=k,lz[now]+=k;return;}
push_down(now);
if(mr<=mid) modify1(ls,l,mid,ml,mr,k);
else if(ml>mid) modify1(rs,mid+1,r,ml,mr,k);
else modify1(ls,l,mid,ml,mid,k),modify1(rs,mid+1,r,mid+1,mr,k);
push_up(now);
}
void modify2(int now,int l,int r,int x,double k)
{
tr[now]=max(tr[now],k);
if(l==r) return;
push_down(now);
if(x<=mid) modify2(ls,l,mid,x,k);
else modify2(rs,mid+1,r,x,k);
push_up(now);
}
double query(int now,int l,int r,int ml,int mr)
{
if(l==ml&&r==mr) return tr[now];
push_down(now);
if(mr<=mid) return query(ls,l,mid,ml,mr);
else if(ml>mid) return query(rs,mid+1,r,ml,mr);
else return max(query(ls,l,mid,ml,mid),query(rs,mid+1,r,mid+1,mr));
}
#undef mid
} int dep[N],son[N];double w[N];
void dfs1(int u,int fa)
{
for(int i=head[u];i;i=e[i].nxt)
{
int v=e[i].to;if(v==fa) continue;
dfs1(v,u);
if(dep[v]>dep[son[u]]) son[u]=v,w[u]=e[i].w;
}
dep[u]=dep[son[u]]+1;
}
int dfn[N],tot;
il void add(int l,int r,double k) {seg::modify1(1,1,n,l,r,k);}
il void ch(int x,double k) {seg::modify2(1,1,n,x,k);}
il double ask(int l,int r) {return seg::query(1,1,n,l,r);} double mx;
void dfs2(int now,int fa)
{
//cout<<"now "<<now<<" "<<son[now]<<" "<<w[now]<<endl;
dfn[now]=++tot;
ch(dfn[now],0);
if(son[now])
{
//cout<<"son "<<son[now]<<endl;
dfs2(son[now],now);
//cout<<"QAQ"<<now<<" "<<dep[now]<<endl;
add(dfn[now]+1,dfn[now]+dep[now],w[now]);
}
for(int i=head[now];i;i=e[i].nxt)
{
int v=e[i].to;double w=e[i].w;
if(v==son[now]||v==fa) continue;
dfs2(v,now);
//cout<<"nw "<<now<<" "<<v<<endl;
for(int l=0;l<=dep[v];l++)
{
double nw=ask(dfn[v]+l,dfn[v]+l)+w;
if(R-l-1<0) continue;
int ll=max(0,L-l-1),rr=max(0,R-l-1);
//cout<<ll<<" "<<rr<<" "<<now<<" "<<dep[now]<<endl;
if(ll>dep[now]) continue;
ll=min(dep[now],ll),rr=min(dep[now],rr);
double maxn=ask(dfn[now]+ll,dfn[now]+rr)+nw;
//cout<<now<<" "<<v<<" "<<l<<" "<<maxn<<" "<<nw<<endl;
mx=max(mx,maxn);
}
for(int l=0;l<=dep[v];l++)
ch(dfn[now]+l+1,ask(dfn[v]+l,dfn[v]+l)+w);
}
int ll=min(dep[now],L),rr=min(dep[now],R);
if(L>dep[now]) return;
//cout<<now<<" "<<ask(dfn[now]+ll,dfn[now]+rr)<<endl;
mx=max(mx,ask(dfn[now]+ll,dfn[now]+rr));
} int U[N],V[N];double W[N];
il bool check(double mid)
{
memset(e,0,sizeof(e)),cnt=0;
memset(head,0,sizeof(head));
for(int i=0;i<(N<<2);i++) seg::tr[i]=-2e9;
memset(seg::lz,0,sizeof(seg::lz));
tot=0,memset(dep,0,sizeof(dep));
memset(son,0,sizeof(son));
for(int i=1;i<n;i++)
Add(U[i],V[i],W[i]-mid),Add(V[i],U[i],W[i]-mid);
mx=-2e9; dep[0]=-1;
dfs1(1,0);
//cout<<"qwq"<<endl;
dfs2(1,0);
//printf("%lf\n",mx);
return mx>0;
}
int main()
{
n=read(),L=read(),R=read();
for(int i=1;i<n;i++) U[i]=read(),V[i]=read(),W[i]=read();
// check(1.5);
double l=0,r=1e6;
while(r-l>1e-5)
{
double mid=(l+r)/2;
if(check(mid)) l=mid;
else r=mid;
}
printf("%.3lf\n",l);
return 0;
}

My Code Style的更多相关文章

  1. 与你相遇好幸运,The Moe Node.js Code Style Guide

    The Moe Node.js Code Style Guide  By 一个最萌的开发者 @2016.9.21 >>代码是人来阅读的,格式规范的代码是对编程人员最好的礼物 :) > ...

  2. Eclipse setting Java code style and codetemplate

    1.open the eclipse tool window First click the Window menu,then check the children's menu which name ...

  3. Java Code Style

    近期困惑于团队成员代码风格迥异,代码质量不可控,作为一名老司机,忧患于后期服务的可维护性,多次一对一的代码Review,耗时耗力不说,效果也不明显.痛定思痛,多次反思之后得出结论:无规矩不成方圆,可靠 ...

  4. 【Idea】idea code style配置eclipse code formatter

    在eclipse中有自动配置code style的功能 ,但是idea上却没有,这个时候需要自己手工配置 1. 在idea中找到Preference->Plugins->Browse re ...

  5. checkstyle.xml Code Style for Eclipse

    1. Code Templates [下载 Code Templates] 打开 Eclipse -> Window -> Preferences -> Java -> Cod ...

  6. _rqy's Code Style for OI

    _rqy's Code Style for OI Inspired by Menci's Code Style for OI 本文介绍_rqy的OI中的代码规范.其来源主要为_rqy的长期积累及参考G ...

  7. Javascript Code Style Guide

    本指南采用的Airbnb发布的基于ES5的JavaScript Code Style. ES5 英文版:https://github.com/airbnb/javascript/tree/es5-de ...

  8. 在IntelliJ IDEA中配置Google Java Code Style及代码格式化快捷键

    google-java-format plugin should intercept the “Reformat Code” action in IDEA (Ctrl+Alt+L) and apply ...

  9. intelij IDEA设置goole code style风格

    1.安装google-java-format 插件      file ->Setings... ->pligins     输入上诉插件安装 2.下载IntelliJ Java Goog ...

  10. Intellij IDEA 配置 Code Style

    前言 昨天自说自话,闲扯了界面设计和代码规范.设计确实需要一些经验,也不一定能取悦所有人.而代码规范却是程序员所起码应当做到的,多人协作中,杂乱的代码就好像批阅潦草的作文,可读性极差. 然而这是个懒人 ...

随机推荐

  1. Redis的五大数据类型及其使用场景

    前言 redis是一个非常快速‎‎的非关系数据库‎‎解决方案.其简单的键值数据模型使 Redis 能够处理大型数据集,同时保持令人印象深刻的读写速度和可用性.‎redis提供了五种数据类型,分别是是: ...

  2. DataGridView 控件分页

    在使用Winform开发桌面应用时,工具箱预先提供了丰富的基础控件,利用这些基础控件可以开展各类项目的开发.但是或多或少都会出现既有控件无法满足功能需求的情况,或者在开发类似项目时,我们希望将具有相同 ...

  3. 用Claude-2-100K复刻了胡锡进老师的写作风格

    大家好,我是老章 最近玩心大发,用Claude-2-100K复刻了胡锡进老师的写作风格,然后用这个风格点评世间万物. 蛮有意思的,直接看效果吧: 怎么实现的呢?老章不喜欢废话,极简介绍一下步骤. 第一 ...

  4. linux 配置dns及代理

    简介 对于新装的环境,可能无法访问外网,此时需要设置代理或DNS实现访问. 类似wget.yum.pip这类命令都需要通过网络进行下载. 配置dns服务 在/etc/resolv.conf中添加如下两 ...

  5. 使用kubeadm部署kubernetes

    k8s版本:1.15.0 前期准备 节点: master:172.50.13.103(2核2G) node-1:172.50.13.104(2核2G) node-2:172.50.13.105(2核2 ...

  6. msfvenom参数简介

    -p, –payload < payload> 指定需要使用的payload(攻击荷载).也可以使用自定义payload,几乎是支持全平台的 -l, –list [module_type] ...

  7. [MAUI]在.NET MAUI中实现可拖拽排序列表

    .NET MAUI 中提供了拖放(drag-drop)手势识别器,允许用户通过拖动手势来移动控件.在这篇文章中,我们将学习如何使用拖放手势识别器来实现可拖拽排序列表.在本例中,列表中显示不同大小的磁贴 ...

  8. 文心一言(ERNIE Bot)初体验

    引言 几个月前向百度提交了文心一言的体验申请,这两天收到了可以体验的通知,立马体验了一把.总体来说,文心一言基本上能做到有问必答,但是一些奇葩的问题还是会难住这位初出茅庐的 AI. 分享体验 我先后问 ...

  9. 数据可视化【原创】vue+arcgis+threejs 实现海量建筑物房屋渲染,性能优化

    本文适合对vue,arcgis4.x,threejs,ES6较熟悉的人群食用. 先报备一下版本号 "vue": "^2.6.11" "@arcgis/ ...

  10. VulnStack - ATT&CK红队评估实战(一) Writeup

    VulnStack - ATT&CK红队评估实战(一) Writeup VulnStack(一)环境搭建 项目地址 http://vulnstack.qiyuanxuetang.net/vul ...