本文为所有想开始竞争性编程的人提供了帮助。唯一的先决条件是对编程语言的了解。
现在,让我们找到一种更好的竞争性编程方法。请注意:
- 人们应该阅读正确的输入和输出格式,因为大多数初学者会在输出中包含多余的打印语句时出错。因此,请注意输出格式。示例–“请输入下一个数字:”和“输出为:”。
- 在编写代码之前,请分析问题约束,因为大多数情况下,您编写的代码都是蛮力的,并且不会在给定的时限约束下运行。
以下是初学者可能遇到的一些问题。 :
- 时间限制:以秒为单位。它使您可以洞悉正确解决方案的顺序。请考虑以下情况:时间限制= 1秒
让我们假设大约1秒可以执行10 ^ 8的操作。
如果您编写的程序的顺序为O(N ^ 2),并且该问题有T个测试用例。然后,您的程序的总顺序将变为O(T * N ^ 2)。
如果T <= 1000且N <= 1000,则(忽略渐进表示法中的隐藏常数)在最坏的情况下可能不会接受您的代码,因为1000 * 1000 * 1000是10 ^ 9运算,意味着10秒。
为避免使用TLE,请始终考虑可能导致该问题的最坏测试案例,并在这种情况下分析您的代码。 - 运行时错误:这是初学者最常遇到的问题之一。主要原因可能是:
- 分段错误:这是非法访问内存地址。
例如, int [] array = new int [100]; System.out.println(array [101]); - 声明大于10 ^ 8的数组。
- 除以零取模。
- 您应该知道如何使用GDB,它将帮助您纠正运行时错误。
- 分段错误:这是非法访问内存地址。
- 编译错误:这是使用C / C++编程时经常遇到的错误之一。
-
错误答案:每当您遇到WA时,请编写蛮力代码并确保它是完美的。现在使用C++中的随机函数生成测试用例。在这些测试用例上运行代码,并匹配输出。现在考虑可以帮助您在算法中找到问题的极端情况。
- IntOverflow :很多时候,您不知不觉中会超过可以存储在基本类型int中的最大值。例如约束:0
#include
int main() { int num1, num2; cin >> num1 >> num2; int answer = num1 + num2; // error if num1 and num2 are large // numbers cout<< answer; return 0; }