这 这篇文章对所有想从竞争性编程开始的人都有帮助。唯一需要的先决条件是编程语言的知识。
现在,让我们找到一种更好的竞争编程方法。请注意:
- 人们应该阅读正确的输入和输出格式,因为大多数初学者都会犯错误,在输出中有额外的打印语句。所以请注意输出格式。 实例 -“请输入下一个数字:”和“输出为:。
- 在编写代码之前分析问题约束,因为大多数时候您编写的代码都是蛮力的,不会在给定的时间限制内运行。
以下是初学者可能面临的一些问题。 :
- 时限 :以秒为单位。它让你洞察正确解决方案的顺序。考虑下面的情况。时间限制=1秒 假设1秒左右可以执行10^8次操作。 如果你写了一个O(N^2)阶的程序,而这个问题没有测试用例。然后程序的总顺序变成O(T*N^2)。 如果T<=1000,N<=1000,那么(忽略渐近符号中的隐藏常数),在最坏的情况下,您的代码可能不被接受,因为1000*1000*1000是10^9个操作,意味着10秒。 为了避免TLE,请始终考虑问题可能出现的最坏测试用例,并在这种情况下分析代码。
- 运行时错误 :这是初学者遇到最多的问题之一。主要原因可能是:
- 分段错误:非法访问内存地址。 例如 int[]数组=新的int[100];系统出来println(数组[101]);
- 声明超过10^8的数组。
- 用0除以并取模。
- 您应该知道如何使用GDB来帮助您纠正运行时错误。
- 编译错误 :这是用C/C++编程时经常遇到的错误之一。
-
答错了 :每当你遇到WA,写一个暴力代码,确保它是完美的。现在用C++中的随机函数生成测试用例。在这些测试用例上运行代码并匹配输出。现在想想那些能帮助你在算法中找到问题的关键案例。
- 流入溢出 :很多时候,您会在不知不觉中超过原语类型int中可以存储的最大值。例如,约束:0
#include<iostream.h>
int
main()
{
int
num1, num2;
cin >> num1 >> num2;
int
answer = num1 + num2;
// error if num1 and num2 are large
// numbers
cout<< answer;
return
0;
}
上面的程序不会总是正确运行,因为(2*10^9)它可能会超过INTS中可以存储的最大值。i、 e 10^9。因此,在这种情况下,必须使用long long int或unsigned int基元数据类型作为答案。
- 比较双打 :
int
main()
{
float
a ;
cin >> a;
if
(a == 10)
cout << “YES”;
}
float和double数据类型没有无限的精度。 当心 (它们的精度分别为6/15位)。所以在比较时,一定要使用(~0.0000001)的余量。例如——
if (abs(a -10) < (0.0000001)) { cout << “YES”; }
其他有用的观点: 有时当你陷入困境时。检查其他已接受代码的运行时间,并分析所需的解决方案顺序和允许的内存量。
- 4 MB大小为10^6的整数数组(假设int需要4字节)或大小为10^3*10^3的二维数组
大多数问题的标准内存限制大约为256MB。
如果您必须分配一个大数组,那么在函数内部进行分配不是一个好主意,因为内存是为每个测试用例分配和释放的,内存是在函数调用堆栈上分配的(堆栈大小在很多地方是有限的)。因此,如果你必须制作一个大尺寸的数组,那么就将其设置为全局数组。
我希望这篇文章能对你有所帮助,也希望你现在能够更好地准备问题,从而表现得更好、更快。
本文由 Ujjwal Kanodia。 如果你喜欢Geeksforgek,并想贡献自己的力量,你也可以写一篇文章,然后把你的文章发到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。
如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论