17/10/23 题目泛做

继续补题解QAQ

集训题

JZOJ 5414

题意:给一个长度为 n 的序列,求在序列中选k个数的异或值的和
分析:一眼看出,肯定是按位考虑贡献,然后我们马上会想到,如果第 i 位有ci个数是 1 ,则有nci个数是 0 ,只有两两配对起来才有贡献,故继续枚举这一位上选j 1 ,这时方案数就是Cjci×Ckjnci,然后直接考虑贡献加起来答案就是 i=0log2max{Ai}j=1[k2]C2jci×Ck2jnci 。这里需要注意 j 只有偶数的情况

JZOJ 5415

题意:n个元素组成序列,元素 i 只可以往后跳ci的任意倍数步到某个 j (即满足ji0(mod ci)),代价为 (ji)×vi ,问从 0 号到每个点的最小代价
分析:不难想到暴力DP:

f(i)=minji0(mod ci)j<i{f(j)+(ij)vj}
,换句话说,就是对于每个 i 的DP值,我们拿去更新其后面i+ci,i+2ci,i+3ci的值,用来更新的值也是每次增加固定的值。这很像一条直线,于是我们现在其实是对于每个点,求若干可满足的这样的直线的最小值,那么我们马上想到了斜率DP:维护一个凸壳!
但是我们需要考虑的是,这里并不能直接套用,因为有是否满足性质(可否转移)的问题。考虑到如果对于一对 (i,j) 满足 ci=cj 同时 i%ci=j%cj ,那么对于任意 i j之后的元素, i j能够转移到的点集是显然相同的,这时可以看出这一系列满足这样性质的元素其实就是一个裸的斜率DP……
于是我们就直接按照 ci i%ci 的不同分别维护 maxc2 个栈,然后强行维护凸壳,DP中实际上只需要查满足要求的 maxc 个栈就可以转移了

JZOJ 5416

题意:给出一个排列 T ,以及初始的m个字符串,每次选最后 m 个按照T中的顺序拼接,问一直拼下去的第 n 个字符串中另外给的一个S出现了几次
分析:考虑出现的次数分为两部分,一部分是原来 m 个字符串的贡献,还有一部分是拼在一起所得。第一部分可以直接计算得,关键在第二部分。
我们考虑到实际上拼在一起的贡献只和这些字符串长度为|G|1的前缀和后缀有关,然后我们先暴力一下,我们可以找到按照规则,以字符串前后缀开头或者结尾的若干种生成的字符串,很容易发现,会出现循环,循环节最多 m(m1) ,同时在循环节中同一位置中间相隔的串数是一样的,我们就可以预处理这 m(m1) 种开头结尾的最短的且满足能匹配上的串所能匹配的数量,接着我们会发现,我们相当于有了一个对这些串的递推方式,利用矩阵快速幂优化转移就可以了

(orz%%%出题人……这真是noip模拟吗……)

模拟题(水)

非常的好做,于是我只写t2?

T2.Coke

题意:给 k 个数ai,选最少的可乐数量 s 使得对这些可乐满足ais=n
分析:这题……是可以变式的orz
原式等价于 (ain)=0
那么搜索一发就可以了我怎么没想到呢QAQ

日常乱切

Tsinsen D3516

题意:给一个带权无向图,问如果加多一条边,怎样删最少数目的边使得这条边可以在图的最小和最大生成树上
分析:考虑这条边长度 L ,在最小生成树上有一个桥性质,在这里表现为任意两点之间连接的最短边长实际就是生成树上的某两点直接连接的边长度(最大生成树的结论对称),否则显然可以相互替换。那么我们现在考虑回这条边(u,v):L,对于所有同样能连接 u v的边,我们发现我们现在删边实际上就是要删去最少条长度小于 L 的边。这显然是容量为1的最小割,把边挑出来跑Dinic就好了,其对于容量为 1 的图跑得飞快,所以虽然这里边数点数都奇多但是还是跑得过的!(听说上界很松?)

Tsinsen D2450

题意:问整系数方程i=1nanxn=B在区间 [L,R] 内存在非负整数解的个数
分析:经典题……之前在smoj上看到过然后就发现了这题……解法非常妙
我们考虑到对于某一个 x ,如果x被凑出来了x+ai等等也可以被凑出来,同样, [L,R] 区间内的数也可以被凑出来,而且很好计算贡献
那么我们现在要考虑的就是最小的那个怎么凑得出来。取最小的那个(使点数最小化跑得比较快) ai ,将所有数对 p=minai 取模然后建立相应的节点。这时考虑到 d[(i+u)%p] 可以由 d[i]+u 来得到,所以就直接连边即可,边数很少,只有 O(N2) 级别,但是点数很多,利用Dijsktra+Heap就可以轻松水过

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值