AC代码
回文数生成算法
前面搞半天没过,原来是pow的问题,pow只会返回int,导致int溢出了。
自己手搓了一个lpow就过了。
主要原理是经过观察

那么i位回文数就有9*10**((i-1)/2)个(/2为向下取整)
然后我们要确定回文数母体,
1 |
|
心路历程(WA,TLE,MLE……)
虽然样例吧都过不了,但我百思不解为何WA,对拍程序生成的都没WA呀。
搞半天原来是pow的问题,pow只会返回int,导致int溢出了。
1 |
|
回文数生成算法
前面搞半天没过,原来是pow的问题,pow只会返回int,导致int溢出了。
自己手搓了一个lpow就过了。
主要原理是经过观察

那么i位回文数就有9*10**((i-1)/2)个(/2为向下取整)
然后我们要确定回文数母体,
1 | #include <iostream> |
虽然样例吧都过不了,但我百思不解为何WA,对拍程序生成的都没WA呀。
搞半天原来是pow的问题,pow只会返回int,导致int溢出了。
1 | #include <iostream> |
这题思路就是二分答案,二分可能的dis并检验
在复杂的就是check()函数必须在logn的级别,写的时候也比较复杂,这边简单阐述一下
1 | ll l=lower_bound(A.begin(),A.end(),obl)-A.begin(); |
这个代码是用来找到该dis可以包含的最多点数,详见下面图解

b=2 , dis=3,包含的最多点数就是-1,-1,5,5,即4个点,在图上很清楚,upper_bound-lower_bound就是4。
然后我们知道,最多点≥k是可能满足条件的(可能最少点符合条件),但最多点<k,那么一定不符合条件
AC
1 | #include <iostream> |
总体思路其实就是对于暴力dp的优化,其实很多时候一些做法就是对暴力做法的优化,所以就算知道时间复杂度较高,也可以写一写试试,看看能不能优化。
思路就是C[i][isE]里面存的是从i点以是否是偶数进入,最优的v。
当然,把之前的全部遍历一遍肯定超时了,所以maxC[2]就登场了。
直接存的就是之前最优的奇数偶数情况,直接调用就行,当然记得更新。
AC
1 | #include <iostream> |
https://www.bilibili.com/video/BV1SGsfeKExw/?vd_source=4350e5f2584d2f27c848b347ea11b675

树的重心是指以该点为根,其最大子树最小
1 | #include <iostream> |

我判断这道题是一道树状dp问题
以上是树状dp问题的基本思路(说白了就是递归,dfs嘛,简单)
当然我这个做法和树上dp可能还是有点不同,但都是靠子树返回的值进行计算
注释应该足够清楚,主要思路就是通过下面的节点传递上来的可传播validS进行求解,然后用dfs2打了一下链状数据结构的补丁
1 | #include <iostream> |
没过样例,主要问题在这里
degree==2的点也会阻隔validS传播
1 | #include <iostream> |
这个代码样例过了,但是全错
主要问题在于输入链状数据,答案一定为0。但我这个程序有点小问题
1 | #include <iostream> |