一种更好的竞争编程方法

这篇文章对所有想从竞争性编程开始的人都有帮助。唯一需要的先决条件是编程语言的知识。

null

现在,让我们找到一种更好的竞争编程方法。请注意:

  1. 人们应该阅读正确的输入和输出格式,因为大多数初学者都会犯错误,在输出中有额外的打印语句。所以请注意输出格式。 实例 -“请输入下一个数字:”和“输出为:。
  2. 在编写代码之前分析问题约束,因为大多数时候您编写的代码都是蛮力的,不会在给定的时间限制内运行。

以下是初学者可能面临的一些问题。 :

  1. 时限 :以秒为单位。它让你洞察正确解决方案的顺序。考虑下面的情况。时间限制=1秒 假设1秒左右可以执行10^8次操作。 如果你写了一个O(N^2)阶的程序,而这个问题没有测试用例。然后程序的总顺序变成O(T*N^2)。 如果T<=1000,N<=1000,那么(忽略渐近符号中的隐藏常数),在最坏的情况下,您的代码可能不被接受,因为1000*1000*1000是10^9个操作,意味着10秒。 为了避免TLE,请始终考虑问题可能出现的最坏测试用例,并在这种情况下分析代码。
  2. 运行时错误 :这是初学者遇到最多的问题之一。主要原因可能是:
    1. 分段错误:非法访问内存地址。 例如 int[]数组=新的int[100];系统出来println(数组[101]);
    2. 声明超过10^8的数组。
    3. 用0除以并取模。
    4. 您应该知道如何使用GDB来帮助您纠正运行时错误。
  3. 编译错误 :这是用C/C++编程时经常遇到的错误之一。
  4. 答错了 :每当你遇到WA,写一个暴力代码,确保它是完美的。现在用C++中的随机函数生成测试用例。在这些测试用例上运行代码并匹配输出。现在想想那些能帮助你在算法中找到问题的关键案例。

  5. 流入溢出 :很多时候,您会在不知不觉中超过原语类型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基元数据类型作为答案。

  6. 比较双打 :

    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”;
    }
    

其他有用的观点: 有时当你陷入困境时。检查其他已接受代码的运行时间,并分析所需的解决方案顺序和允许的内存量。

  1. 4 MB大小为10^6的整数数组(假设int需要4字节)或大小为10^3*10^3的二维数组

大多数问题的标准内存限制大约为256MB。

如果您必须分配一个大数组,那么在函数内部进行分配不是一个好主意,因为内存是为每个测试用例分配和释放的,内存是在函数调用堆栈上分配的(堆栈大小在很多地方是有限的)。因此,如果你必须制作一个大尺寸的数组,那么就将其设置为全局数组。

我希望这篇文章能对你有所帮助,也希望你现在能够更好地准备问题,从而表现得更好、更快。

本文由 Ujjwal Kanodia。 如果你喜欢Geeksforgek,并想贡献自己的力量,你也可以写一篇文章,然后把你的文章发到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。

如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享