首页 > 代码库 > jzyz集训 0612

jzyz集训 0612

  今天闵神找的题,题目质量还算不错,就是有些偏套路了。

  第一题:定义一个排列是合法当且仅当这个排列中不存在大于2的循环节,询问有多少长度为n的排列是合法的且B排列是该排列的子序列。

  恩...这题目其实不错,挺考验选手对题目性质的观察的。

  首先发现,如果确定了一个B排列从第k+1个位置开始匹配A的m+1个位置以后,可以直接确定后面的方案数。

  然后问题就变成了把B排列的前k个放进A排列的前m个有多少种方案数。

  然后我就开始了DP,然后我就挂了,原因是匹配方案可能发生重叠,这是DP没法做的,尽管发生的概率很低,数据水到我还有85。

  正确的方法是对于每个K暴力验证,原因是对于每个K填充方案是唯一的....居然没看出来,该死,因此只需判断是否合法即可。

  呵呵,我发现我DP走进了死胡同时就应该另起炉灶的,这是我的锅。

  第二题:Q次询问最短路,有如下限制:只能走边权递增的路径,走的不能超过K条边。

  这两个玩意你不能都分层图的,考虑到这是个图,对于第一个限制可以从小到大枚举边,这样省掉了一维,然后预处理f[i][j][k]即可。

  又没长记性,忘了从小到大枚举边的常用套路了,失败啊,但暴力能A也很玄学。

  第三题:从一个凸包上选出一个最小的凸包使得最小的凸包能包住所有的白点。

  folyed可以找最小环。关键怎么预处理图上的边,对于这个可以二分,考场上想到了,懒得打(暴力有70)。

 

  这也太水了吧。

 

 

 

 

jzyz集训 0612