写代码要注意的几点(2)

一。用scanf语句读入数据时,%d和%c不要忘记&。读字符串时则不加&;

二。在要读入字符或字符串时要确保没有空字符;尤其是行末回车符和空格;

三。要用半角输入法。全角状态下编译通不过。上次无意间打了一个全角空格,怎么都编译不过去,而且看不出来。无奈只好重新写一遍。

四。循环嵌套时不要起相同的变量名。

五。声明变量时尽量声明的有意义,比如对应英文单词的缩写或汉语拼音的缩写。

六。有的单词不能被声明成变量名称。关键字是C++预定义的一些单词,我们定义变量常量时是不能使用的,列一下吧:auto  bool  break  case  catch  char  class  const  const_case  continue  default  delete  do  double  dynamic_cast  else  enum  explicit  extern  false  float  for  friend  goto  if  inline  int  long  mutable  namespace  new  operate  private  protected  public  register  reinterpret_cast  return  short  signed  sizeof  static  static_cast  struct  switch  template  this  throw  true  try  typedef  typeid  typename  union  unsigned  using  virtual  void  volatile  while。

七。搜索时要注意回溯。例如迷宫问题,向各个方向探索,没有路,就退一步,继续搜索其他路。

八。根据数据范围选择合适的算法。

九。最近公共祖先LCA倍增算法,时间复杂度nlogn.

预处理通过dfs遍历记录每个节点到根节点的距离dis[i]和深度d[i]。

init()求出每个节点u的2^j祖先p[u][j];

求最近公共组先,根据两个结点的深度,如不同,向上调整深度大的节点,使两个节点处在同一层上,这时,如果正好是祖先,结束。否则将两个节点同时上移。

~~~模版~~~

转载于:https://www.cnblogs.com/syx-799/p/5781876.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值