点子

你在制作一个游戏,关卡设计员帮你设计了 n n n个关卡,
每个关卡有各自的难度 ( 1 − m (1-m (1m的整数 ) ) )和精彩度 ( 1 − m (1-m (1m的整数 ) ) )
假如最终的游戏要求从中挑选若干个游戏组成一个序列,
每关的难度和精彩度都分别不小于上一关。
如果 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 mm的表,其中 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(n3)
当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(n3)+4[n+(1)(21n+21)]

http://api.mtyqx.cn/api/random.php

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值