首页 > 其他 > 详细

挂分小技巧

时间:2020-08-26 15:33:18      阅读:70      评论:0      收藏:0      [点我收藏+]

事无巨细,有挂分技巧就写

如果有朋友愿意提供新的挂分小技巧,可以评论或者发Q联系我,感激不尽!

常见的挂分小技巧

  • 看好题目要求,别自作聪明!

  • 数组开小

  • 模数取错

  • 该开 \(\text{long long}\) 的题没开 \(\text{long long}\)

  • \(\text{freopen}\)写错( \(\text{frepoen}\) 之类的)

  • \(\text{in}\)\(\text{out}\) 文件写错,正确写法(根据题目而定):

    freopen("a.in", "r", stdin);
    freopen("a.out" ,"w", stdout);
    
  • 莫名其妙在代码里多加了几个符号

  • 炸空间,或者空间开小,有的题空间开小不一定是 \(\text{RE}\),还有可能是 \(\text{WA}\)

  • 多测不清空,爆零两行泪

  • 不要在结构体里开数组开的太大,否则即使没爆空间也会出现许多奇怪的错误

  • 奇奇怪怪的手误,比如:\(f[y][i]\) 写成 \(f[y][y]\)\(s=read(),t=read()\) 写成 \(s = read(), s = read()\).

  • 数据范围十分重要!\(2^{31}\)\(\text{0x3f3f3f3f}\) 大!

  • 在有返回值得函数中记得加 \(return\)

  • 注意数组的下标会不会减出负数,如果有负数会 \(\text{RE}\)

矩阵中的挂分小技巧

  • 矩阵记得初始化,我的写法如下:

    struct matrix { 
      int a[A][A];
      matrix() { memset(a, 0, sizeof(a)); } 
      void init() { for (int i = 1; i <= n; i++) a[i][i] = 1; }
    };
    

主席树中的挂分小技巧

  • 一定不能吝啬空间,开 \(30\) 倍左右?

  • 在主席树中,if (k <= tmp) query(t[x].l, t[y].l, t[lca].l, t[fa_lca].l, l, mid, k); 中的 k<=tmp 写成 k>=tmp

  • \(\text{build}\) 函数中,忘记加 \(now\),答案没错,但是程序运行十分缓慢

    void build(int &now, int l, int r) {
      t[now = ++tcnt].sum = 0;
      //debug:t[now = ++tcnt].sum = 0写成t[++tcnt].sum = 0;
      //忘记加now导致程序运行速度十分缓慢 
      if (l == r) return;
      int mid = (l + r) >> 1;
      build(t[now].l, l, mid), build(t[now].r, mid + 1, r);
    }
    

线段树中的挂分小技巧

  • \(,\text{query,update}\) 函数中的 \(l,r\) 写成 \(l,mid\)\(mid+1,r\)(结构体记录了每个区间的左右端点,\(l,r\) 指的是查询或修改区间,这个区间的端点应该是不变的)
  • 至少开 \(4\) 倍空间

最短路中的挂分小技巧

  • 单向边,单向边!
  • 有向图,有向图!

网络流中的挂分小技巧

  • 建边要从偶数边开始减,这样 \(\text{i^1}\) 才能找到 \(\text i\) 的反向边
  • 如果要建编号为 \(0\) 的边 一定记得初始化 \(head\) 数组为 \(-1\)
  • 输出方案时容量为 \(0\) 的边不一定是用过的边,还有可能是从起点连过来的边的反向边,所以输出方案时要判断这种情况

挂分小技巧

原文:https://www.cnblogs.com/loceaner/p/13565270.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!