竞争性编程对于一个人在编码领域的发展至关重要。本文将讨论竞争时应牢记的一些基本要点。
- 列出执行问题中经常遇到的任务的功能列表,并将它们以模板的形式添加到您的代码中。这样可以节省比赛时间,并有助于快速提交解决方案。模板中需要添加的一些有价值的功能如下:
- 幂函数( a N %M ,其中a,b,N是整数,M是素数)
- 打印主要因素
- 打印素数
- 使用mod查找nCr的函数
- 计算GCD的函数。
- 在考虑解决问题的方法时,请集中精力于约束。根据约束条件,通过计算方法的时间复杂度,检查设计的解决方案是否可以通过所有测试用例。
- 仅当约束足够小(例如2 N )且不会超过时间限制时,才考虑使用位掩码或蛮力。因此,该方法应包括检查所有可能的结果组合。
- 如果存在涉及输入形式的排序数据的问题,请考虑使用二进制搜索的方法。
- 如果存在与树,图(循环检测及其他)有关的问题,请发展一种思维方式,以考虑围绕“深度优先搜索”或“宽度优先搜索”的方法,这是解决此类问题的基本要求。
- 数论:
- 两个或多个奇数质数的加法将始终是偶数(例如13 + 3 = 16、19 + 5 = 24)。
- 哥德巴赫猜想是数学中尚未解决的著名问题之一(更确切地说,是数论)。注意:尚未证明较大的数字。
- 为了在CP中做好,还需要掌握数论中的其他一些概念。
- 如果状态取决于将来的状态,则无法用贪婪的解决方案解决问题。而且,不能采用幼稚的方法,因为它将超出时间限制。因此,对于所有此类问题,请始终尝试使用动态编程解决方案。
如果可以编写一种以指数复杂度工作的简单递归解决方案,这将非常简单。将访问的每条路径存储在内存中,以后可用于解决方案的方向,这称为记忆。一旦学会了记忆方法,便逐渐学习制表法。 - 如果存在与XOR , OR和AND之类的按位运算符相关的问题,那么它可以通过这些操作来更改数组,那么,有时会采用幼稚的方法,因为最多有64个具有不同MSB的数字(2 64 ) 。但是在这种方法中,主要任务是确定基本情况。
让我们来看一个示例,其中给出了一个按升序排列的排序数组,任务是通过用两个最小次数的按位XOR替换两个相邻元素来使其不递增。Input: arr[] = {2, 5, 6, 8}
Output: 1
Explanation:
Operation 1: Choose elements 2 and 5, and replace 2 them with 2⊕5 = 7.
Now, the array will be {7, 6, 8} which is non-increasing.
Hence, the count of operation is 1.方法:这也可以以幼稚的方式解决,即找到一个XOR小于子数组起点之前的元素或小于子数组终点之后的元素的子数组。
但是,在该句柄处理之前,如果存在3个连续元素且MSB相同(例如, arr [i – 1]的MSB = arr [i] = arr [i + 1] ),则可以得到结果通过将其替换为arr [i]⊕arr [i + 1] 。
因此,对于在阵列幼稚的方法,只有当N> 60,因为2 *(2⌊log10 9⌋+ 1)= 60。 (让a [i] <= 10 9 )。乘以2,因为这是唯一可能的最后一种情况。如果乘以3,那么肯定会有3个连续的元素具有相同的MSB(最高有效位)。
- 数组元素的GCD也可以表示为:
gcd(a1, a2, ⋯, an − 2, an − 1, an) = gcd(a1, a2 – a1, ⋯, an – 1 – an − 2, an − an − 1)
证明:
gcd(a, b) = gcd(a, b – a)
gcd(a, b, c) = gcd(a, gcd(b, c)) = gcd(gcd(a, b), c)
Then, it can be generalized as:
gcd(a1, a2, ⋯, an−1, an) = gcd(a1, a2, ⋯, an−2, gcd(an−1, an))
= gcd(a1, a2, ⋯, an−2, gcd(an−1, an−an−1))
= gcd(a1, a2, ⋯, an−2, an−1, an−an−1)
= gcd(a1, a2, ⋯, gcd(an−2, an−1), an−an−1)
= gcd(a1, a2, ⋯, gcd(an−2, an−1−an−2), an−an−1)
…
= gcd(a1, a2, ⋯, an−2, an−1−an−2, an−an−1) - 一些最常用的按位运算符属性可以是:
- a⊕b = a | b − a和b
- a + b = a⊕b + 2 *(a&b)
- a + b = a | b + a和b
这里的“ a”和“ b”是整数,⊕表示XOR,&表示AND和|表示“或”。
如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。