余数求和
对n中,大于k的部分,结果都是k
小于k的部分,不知道有什么规律,可能就是遍历?
不出意外的超时了,就是在小于k的部分,加和应该有规律可循
AI题解
这个向下取整[k/i]就是k与i做除法后的商
但是时间复杂度优化在哪里呢,原来对前半部分是直接求k与i的模,现在是转成了k与i的商,并且还要再乘i
原来复杂度是o(n),现在虽然没后半部分,复杂度是o(min(n,k))
所以在实现时,还要用到数论分块
数论分块
针对为什么有O(根号k)种取值的推导,对情况1和情况2的结果数量,最终不该是加和的关系吗?即i<=k,然后根号k只是i取值范围中的一点,分出了前后两部分,前部分因为i不超过根号k,所以最终结果不超过根号k
对于情况2,由放缩也知道最终结果数不超过根号k个,那加起来最多就是两倍根号k
所以这里说的是一个级别,级别是O(根号k)
DEBUG
1569
目前想的是,对于每个节点,其紧邻子节点的相对插入位置是可以互相调换的,
对于3,4,5,1,2的情况
3的紧邻子节点是1和4,那么1和4必须在3之后,但其出现的相对顺序可变
就是说每个节点,必须保证其比它的父节点出现的晚,但是和它的兄弟节点之间的相对关系可变
但这如何用在方案数的求解上?
AI题解
就是说左右子节点的交错,靠组合数来处理
对于紧邻层的子节点,不考虑子树内部节点是如何排序的情况数,而是靠递归来保证每层合法
每一层只需要计算其子树上所有节点在当前看上去整体内部的一个出现顺序
组合数计算
如何C++实现组合数的计算公式?
DEBUG
4083
貌似只有相同值之间的异或才会为0,所以问题实际是在问把原数组变成无相同元素后的数组,需要删掉几个元素
但也不是,比如第二个示例,就不用把相同的4全都删掉
应该是删减连续的相同数据块