17/10/25题目泛做

来源:互联网 发布:下载制作ppt软件 编辑:程序博客网 时间:2024/06/07 12:50

发现集训题比模拟题画风正常了许多……终于不那么鬼畜了……今天的题目还是可以切的
orz本校神犇%%%zfr AK辣

集训题

JZOJ 5421

话说这似乎是HDU原题 原题大赛?(雾)

题意:约瑟夫问题,快速回答多组(T20)数据,人数n109,跳的步数k105
分析:先考虑一种O(n)的做法。我们考虑对于同一个k,设F(x)表示有x人的时候最终到了哪一个编号,那么先考虑第一个人跳了之后,问题相当于化简成F(x1)的情况,那么不难推出

F(x)=(F(x1)+k)%x
这时我们又注意到,当x足够大的时候(使得F(x)+k<x),那个模实际上没有用,就是直接增加,这时我们就可以直接计算辣
时间复杂度O(klogn)

JZOJ 5422

题意:给n个向量,每次改一个或者查询区间内向量两两叉积的长度再平方的和
分析:看到这种题目,第一眼就觉得非常有对称性,那么肯定是推式子了
考虑

i=1nj=i+1n(xiyjxjyi)2

有序性有点烦,我们直接算然后去掉相同的和对称的重复,同时暴力展开(其实前后两个重复的部分已经抵消了):
=12i=1nj=1n(x2iy2j+x2jy2i2xixjyiyj)

=(i=1nx2i)×(i=1ny2i)(i=1nxiyi)2

看一眼,这东西不是随便维护吗?开三个树状数组就A掉了……不过要注意模的时候怎么搞,这需要非常注意(这搞了我好久啊QAQ)

其实这里考虑两个序列所有两两乘积和的方法也基本上是一个推导的时候很有用的套路

JZOJ 5424

题意:求最长公共上升子序列
分析:显然是DP,还是挺好推的,不过要用到一点DP对状态限制的小技巧
我们考虑设f(i,j)表示ab分别选到ij的最长长度,其中必须选bj(这里就是限制状态的技巧),当ai=bj的时候有f(i,j)=maxk<j,bk<bj{f(i1,k)}+1,那么我们只需要扫j的时候顺便维护下maxk<j,bk<ai{f(i1,k)}的等差数列
分析:考虑枚举每一个数,看看它能否作为比例中项。这里开一个桶,边扫边加,如果对于当前数x,存在某个kxkx+k的存在情况不同(也就是相当于一个在前面,一个在后面),那么明显这就是一个等差数列啊(因为题目问存不存在而已,所以可以直接写了)
然后就是问这样桶里面是不是整个回文的就好了(其实就是向左向右对称的极长),可以用树状数组快速维护Hash值,甚至可以用bitset……

Tsingsen D2443

题意:在仙人掌上询问最短路
分析:先跑下Tarjan找环,然后考虑拆环然后将环里面的点连向深度最小的点,构成一棵棵子树,令这些新加的边等于环上最短距离
如果询问的两点在同一个环里面,那么就比较一下正着走和反着走
如果不在同一个环里面那么可以直接在树上跑
其实我想说这不就是JZOJ 5287吗怎么作业题给我们出成noip模拟了现在仙人掌烂大街了吗……

原创粉丝点击