NOIP 考前小整理

考前整理一些可能用得到的东西。

仅作为整理,可能有不全或错误。

  • start on 2023.11.16

    终端和 ulimit

  • upadte on 2023.11.17

    增加少量 vscode 设置、弱智错误

  • update on 2023.11.20

    考 NOIP 的时候试了一下,发现 vscode 的部分是错的,但没细看怎么回事,不管了。

一、终端编译

  1. -std=c++14

  2. -Wall-Wextra。会提醒一些可能写错了的地方,或者一些比较明显的 UB。比如 for(___)a=___;b=___;,会告诉你循环可能漏掉了末尾;比如 ++x + x++,会告诉你未定义。

    有可能一些习惯,比如压行,会触发警告。这就需要视情况在改代码、带着一串警告编译、隔一会儿一检查里自己选择了。不建议因为这个浪费过多时间。

  3. -fsanitize

    sanitize,净化、消除。

    使用: -fanitize=【type】-fanitize=【type1】,【type2】

    例:-fsanitize=undefined,address

    以下是部分常用的。

    名称 用途
    undefined 未定义
    address 访问越界
    signed-integer-overflow 有符号溢出

    如果触发了会有绚丽的特效,但是也许不一定好使。当个添头,自己一定要多检查检查。

然而你如果全加上的话:


g++ a.cpp -o a -Wall -Wextra -fsanitize=undefined,address,igned-integer-overflow

反正我选择写一份存起来,在关键步骤检测一下。

二、ulimit

目前只有一小部分常用的,其余的以后再说,如果还有以后。

  1. 查看各项限制:ulimit -a

    你可以在里面看到各项的内容、单位、缩写以及当前大小。

    比如 virtual memory 内存,stack size 栈空间

  2. 更改某项限制:ulimit -【type】 【size】

    例如:ulimit -v 512000,将内存限制改为 512000KB。

    对于单个终端窗口,除了第一次以外,每次都只能改小而不能改大。

  3. 常见用法:

    • 由于默认栈空间可能较小,本地测试时有可能爆栈,出现莫名其妙 RE 的情况。据本人统计,此情况一般会带来不小的影响,在比赛时可能很影响心态。

    • 如果开了许东西,但不清楚是否超出限制,可以限制内存大小,如果超限会显示 段错误 或者 Segmentation fault 之类的。注意,正常的超限是在 ./a 之后报错,如果在 g++ 时报错则属于下一条的问题。

  4. 一些重要的小问题

    然而 ulimit 有时不能对内存进行很小的限制,这取决于你的头文件用了多少。

    因为引用头文件是需要空间的,这部分空间同样受 ulimit 限制,如果大小不够就会报一些错误。报错内容似乎和大小有关,这里不深研究。

    另外,这个空间限制并不严谨,在此给出部分本机测试结果。需要注意,这并不是准确的值,连续测试下的结果有所出入,所以一定别卡下界。

    头文件 卡上界 推荐大小
    cstdio 50100 60000
    bits/stdc++.h 189600 200000
    ext/pb_ds/assoc_container.hpp 127590 130000
    bits/extc++.h 240800 250000

三、vscode

上回 CSP 的时候发现机器没有代码补全,没什么影响,但想起来了就看了看 vscode 的 C++ 插件设置。

发现有好多可以调的东西,然而感觉没太大意义,简单说一下。

  • update on 2023.11.20

    考 NOIP 的时候试了一下,发现都用不了。

    赛场上发现补全和红浪线都不好使,不知道怎么回事,虽然没有任何影响但是很沮丧。可既然退役了就不打算管了。

    只能说不要依赖这些东西吧。有兴趣的可以去看看 CCF 发的虚拟机。

在侧栏里 Extensions -> C/C++ -> Manage(齿轮图案) -> Extension Setting,然后配置即可。default 意为默认,应该跟 enable 差不多(至少第一项补全是)。

代码补全是 Autocomplete。

步骤

对照翻译

自动纠错需要查找。Error Squiggles。

ctrl+T 调出顶上的框,然后将框内改为 > ,后面写要找的东西。

默认这样:

image

不加是搜索文件:

image

加了之后:

image

四、一些弱智错误

  1. ios::sync_with_stdio(0); 不能和 fclose 同时用!!!

  2. 所有需要通过 e[i^1] 找反边的,tot 初始赋成 1

  3. 如果建边时 e[++tot]={v,head[u]};,那么只会赋两个值,如果有边权或者什么会为 0

  4. 缩点双时要判单点。

  5. 如果对于结构体定义了默认构造函数,需要注意全局变量的初值。

  6. 网络流注意点数不一定是 n。我选择单开V,E

  7. 树上路径长度看好是边数还是点数。

  8. 并查集初始化 tag[i]=i,别不写,也别写成 tag[i]=1

posted @ 2023-11-16 21:06  浣熊’  阅读(107)  评论(3)    收藏  举报