你在制作一个游戏,关卡设计员帮你设计了
n
n
n个关卡,
每个关卡有各自的难度
(
1
−
m
(1-m
(1−m的整数
)
)
)和精彩度
(
1
−
m
(1-m
(1−m的整数
)
)
),
假如最终的游戏要求从中挑选若干个游戏组成一个序列,
每关的难度和精彩度都分别不小于上一关。
如果
n
n
n很大但
m
m
m相对较小,最多可以做多少关?
m较小是问题的突破口,另一个突破口是如果有两关 ( a i , b i ) = = ( a j , b j ) (a_i, b_i)== (a_j, b_j) (ai,bi)==(aj,bj),那么两关一定是要么都选,要么都不选想清楚这一点之后,准备一张 m ∗ m m*m m∗m的表,其中 x i j x_{ij} xij表示难度为 i i i,精彩度为 j j j的关卡有多少个。然后呢?就是那个经典的动态规划问题了:从左上角走到右下角,路径最大值是多少?
有一个 n n n个元素的数组,除了两个数只出现一次外,其余元素都出现两次,让你找出这两个只出现一次的数分别是几,要求时间复杂度为 O ( n ) O(n) O(n)且再开辟的内存空间固定 ( ( (与 n n n无关 ) ) )。
首先,把所有元素异或,得到的结果就是那两个只出现一次的元素异或的结果。然后,因为这两个只出现一次的元素一定是不相同的,所以这两个元素的二进制形式肯定至少有某一位是不同的,即一个为 0 0 0,另一个为 1 1 1,找到这一位。可以根据前面异或得到的数字找到这一位,怎么找呢?稍加分析就可以知道,异或得到这个数字二进制形式中任意一个为 1 1 1的位都是我们要找的那一位,找到这一位就可以了(这很容易)。再然后,以这一位是 1 1 1还是 0 0 0为标准,将数组的 n n n个元素分成了两部分,将这一位为 0 0 0的所有元素做异或,得出的数就是只出现一次的数中的一个;将这一位为 1 1 1的所有元素做异或,得出的数就是只出现一次的数中的另一个。从而解出题目。总共遍历数组两次,时间复杂度为 O ( n ) O(n) O(n)。
证明等腰三角形两底角相等: Δ A B C ≌ Δ A C B \Delta ABC ≌ \Delta ACB ΔABC≌ΔACB.
O ( 1 ) O(1) O(1)判断二叉树 L C A LCA LCA
并查集维护父亲时,路径压缩可能跳到 L C A LCA LCA上面的节点
利用中序遍历——左中右,提前求出编号
根据二叉树的性质
此时 L C A LCA LCA的编号一定在要求的两个节点的编号之间
而 L C A LCA LCA之上的节点一定在编号之外
那么就可以 O ( 1 ) O(1) O(1)判断是否为 L C A LCA LCA了
http://gryz.cf:8083/contest/6/problem/125
计算000年~当前的天数
long long Calculation(int y,int m,int d){
if (m<3) {y-=1;m+=12;}
return 365*y+y/4-y/100+y/400+(153*m-457)/5+d-306;
}
周长为
n
n
n(
n
n
n是正整数),边长为整数的三角形的个数用
n
n
n来表示?
当n是偶数时,
a
(
n
)
=
a
(
n
−
3
)
a(n) = a(n-3)
a(n)=a(n−3)
当n是奇数时,
a
(
n
)
=
a
(
n
−
3
)
+
[
n
+
(
−
1
)
(
1
2
n
+
1
2
)
]
4
a(n) = a(n-3) + \frac{[n + (-1)^{(\frac12n+\frac12)}]}4
a(n)=a(n−3)+4[n+(−1)(21n+21)]
http://api.mtyqx.cn/api/random.php