• 编程奇境:C++之旅,从新手村到ACM/OI算法竞赛大门(竞赛小魔法:万能头文件&加速)


    如果看到这里的各位是想要参加竞赛,那么接下来一点一些小魔法大家可以修炼一下下。

    万能头文件

    在那遥远的编程王国,藏着一件传说中的秘宝——bits/stdc++.h,这不仅仅是一块普通的头文件石碑,它是C++语言魔法的集大成者,被誉为编程者的“万能钥匙”。

    #include

    在这薄薄的一行符咒之下,蕴藏着庞大的知识体系:从基本的输入输出流iostream,到神奇的标准模板库STL的全副武装——容器如向量vector、列表list、映射map的魔盒,算法如排序sort、查找find的魔杖,一应俱全;还有那些操控字符串的符文string,以及处理数值与数学运算的古老符咒cmathcstdlib……所有这些,只需一个简单的包含指令,便如同打开了一扇通往无限可能的大门。

    使用了这个头文件后,一般竞赛所需要用到的头文件都可以不用再写了,因为都已经包含在这里面了。

    加速技巧

    在c++中,cin和cout的速度并没有scanf和printf快,但是cin和cout写起来很简洁,但是有些题目会卡时间,数据量非常大的情况下,用cin很有可能会超时。

    所以,我们可以使用关流。

    在输入前加这么一句话:

    1. ios::sync_with_stdio(0);
    2. cin.tie(0);
    3. cout.tie(0);

    好处总结:

    1. 提高速度:关闭同步可以显著减少I/O操作的开销,特别是在大量数据读写时,使得程序运行得更快。
    2. 减少延迟:C++的cincout在未同步时,可以利用缓冲区更高效地处理数据,减少读写延迟。
    3. 优化竞赛编程:在ACM等编程比赛中,毫秒之差决定胜负,此技巧常用于追求极致的执行效率。

    注意事项:

    • 兼容性问题:禁用同步后,C++ I/O流和C风格I/O函数之间可能无法正确交互,使用时要确保程序中只使用一种风格的I/O。
    • 只应在必要时使用:在日常开发或不需要极端优化性能的场合,保持默认同步状态可以避免潜在的错误和麻烦。

    因此,ios::sync_with_stdio(0)就像是给你的魔法图书馆安装了一个“超速模式”,虽然强大,但需谨慎使用。

    除此之外

    我们还可以使用快读来代替cin

    1. //快读
    2. inline int read()
    3. {
    4. int x=0,f=1;char ch=getchar();
    5. while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    6. while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    7. return x*f;
    8. }

     这是一种比关流更快的读入方式,如果使用了快读还是超时,那么就是算法存在问题了。

    我们还可以使用\n来代替endl

    在程序最前面定义

    #define endl '\n'

    代码简化

    在写long long的时候 要写这么长一个字符可能在打字上有些许的耗费时间,我们可以直接用ll代替

    #define ll long long

    这样写起来是不是快多了[狗头]

    好啦,今天的一些小魔法就介绍到这里,专栏再见哦~记得点点关注~

  • 相关阅读:
    【CSDN云IDE】详细实例操作教程(python方向)
    JavaEE之HTTP协议 Ⅰ
    R语言两个矩阵(两组)数据的相关性分析
    【数据结构与算法】时间复杂度和空间复杂度
    git~issue在github/gitlab中的使用
    在使用apifox做接口测试的时候,如何统一配置${spring.application.name}的值或者统一替换,如果不能批量指定或者统一配置
    遗传算法(GA)求解基于栅格地图的机器人最优路径规划,可以自行修改地图(提供MATLAB代码)
    python:argparse
    什么是操作系统
    小程序考勤
  • 原文地址:https://blog.csdn.net/X_StarX/article/details/139475920