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

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

万能头文件

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

#include<bits/stdc++.h>

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

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

加速技巧

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

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

在输入前加这么一句话:

ios::sync_with_stdio(0);
cin.tie(0);
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

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

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

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

在程序最前面定义

#define endl '\n'

代码简化

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

#define ll long long

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

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

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-06 13:16:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-06 13:16:05       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-06 13:16:05       82 阅读
  4. Python语言-面向对象

    2024-06-06 13:16:05       91 阅读

热门阅读

  1. python 做成Excel并设置打印区域

    2024-06-06 13:16:05       30 阅读
  2. Python | MATLAB | R 心理认知数学图形模型推断

    2024-06-06 13:16:05       28 阅读
  3. 力扣1838.最高频的元素的频数

    2024-06-06 13:16:05       29 阅读
  4. C/C++中volatile关键字

    2024-06-06 13:16:05       31 阅读
  5. SpringBoot @ModelAttribute

    2024-06-06 13:16:05       29 阅读
  6. centos7 安装 mysql5.7 LTS

    2024-06-06 13:16:05       28 阅读
  7. Springboot接收参数的21种方式

    2024-06-06 13:16:05       25 阅读
  8. ngrok的使用

    2024-06-06 13:16:05       32 阅读
  9. HTML5 Web Workers 详解 (2)

    2024-06-06 13:16:05       24 阅读
  10. 查看 WSL2 (Windows Subsystem for Linux 2) IP 地址

    2024-06-06 13:16:05       31 阅读