17/10/25题目泛做

发现集训题比模拟题画风正常了许多……终于不那么鬼畜了……今天的题目还是可以切的
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) 表示 a b分别选到 i j的最长长度,其中必须选 bj (这里就是限制状态的技巧),当 ai=bj 的时候有 f(i,j)=maxk<j,bk<bj{f(i1,k)}+1 ,那么我们只需要扫 j 的时候顺便维护下maxk<j,bk<ai{f(i1,k)}然后就可以很容易地直接转移辣

另外,话说这里这个东西甚至是可以数据结构维护的,并不需要扫的时候这样做,那么也许存在更低复杂度的方法?因为实际上相同的字符并不会很多,所以状态数也相应可以降下来?

日常乱切

Tsinsen D2442

题意:给一个排列,问是否存在一个长度不小于 3 的等差数列
分析:考虑枚举每一个数,看看它能否作为比例中项。这里开一个桶,边扫边加,如果对于当前数x,存在某个 k xk x+k 的存在情况不同(也就是相当于一个在前面,一个在后面),那么明显这就是一个等差数列啊(因为题目问存不存在而已,所以可以直接写了)
然后就是问这样桶里面是不是整个回文的就好了(其实就是向左向右对称的极长),可以用树状数组快速维护Hash值,甚至可以用bitset……

Tsingsen D2443

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值