刷题表
由于博主越来越懒 有时懒得写blog
于是决定 写个刷题表
记录部分简要题解
BZOJ 3152: [Ctsc2013]组合子逻辑
被题意杀了一波。。。题意传送门http://www.codevs.cn/wiki/solution/?problem_id=2028
做法就挺简单的 第一个一定要用 那么就直接搞 搞不完 就用他搞过的 继续搞
//感觉BJ题解杀了一波。。。
BZOJ 3133: [Baltic2013]ballmachine
首先 每次只取一个球 所以插入时一个个插复杂度不会爆炸!//BJ脑瘫了一波。。
之后就随便搞了 下落优先级一定 直接维护先搞哪个空闲点就行 用PQ可搞
BZOJ 2217: [Poi2011]Lollipop
BZOJ 3017: [Usaco2012 Nov]Cow Breeds
用f[i]表示当前有i个左括号未匹配的方案数
dp转移就直接在每个括号推进来时候搞就行了 转移随便YY就就好
BZOJ 5127: [Lydsy12月赛]数据校验
虎题,显然一个区间满足条件当且仅当排序之后相邻两数之差<=1
BZOJ 3427: Poi2013 Bytecomputer
最后一定是-1-1-1000001111 猜结论或者YY下就行 之后就可以随便dp了
BZOJ 2337: [HNOI2011]XOR和路径
xor嘛 先拆位 之后 令f(i)表示在i处为1的概率 就会有如下的转移
f(i)= ∑[e(i,j).val==0]*f(j)/outdegree(i)+∑[e(i,j).val==1]*(1-f(j))/outdegree(i)
高斯消元搞一搞就好了
BZOJ 4818: [Sdoi2017]序列计数
首先思想应该是去掉素数限制 之后再减掉没有素数的
dp很好想 式子就不写了 之后呢 优化的话 可以用矩乘 O(lognp^3)
但是它还有更好的优化方法 每次转移时是 p^2 的 所以直接倍增优化 每次爆乘
BZOJ 4870: [Shoi2017]组合数问题
做完了才意识到 这tm是去年省选题啊... 竟然毫无印象 当时拿了60还是70...
真是大水题啊... 只要放弃推式子 试一试dp 你就可以A掉了...
矩乘做法太low了 来说一下dp倍增的优化方式
这个东西是满足结合律的 (大雾
按其他blog的说法就是 有 f[n][] 就可以求 f[2n][]
// 理解成每次枚举前/后n个选几个
所以就有一个类似卷积的式子 每次暴力乘 O(lognk^2)
UPD: 这个东西确实是结合律 本质是多项式相乘 (A*B)*B=A*(B*B)
BZOJ 3029: 守卫者的挑战
O(n^3)dp显然... n那个唬人的范围根本无卵用啊...
BZOJ 1195: [HNOI2006]最短母串
不想写code了 写个题解算了...
f[s][j] 表示状态为 s 最后一个为 j 的最小代价
至于字典序 可以记 g[s][j] 维护该状态的串
也可以爆搜剪枝 先随便dp得到的答案剪掉字典序比它大的 还有用已知dp值剪掉最少加入字符数+现在字符数>最小代价的
BZOJ 1009: [HNOI2008]GT考试
这种题就该一眼秒掉 太显然了
f[i] 表示匹配 i 位的结果 每次填一个数的转移由m的next决定 kmp一下
之后矩乘优化dp就行了
BZOJ 2689: 堡垒
考虑最外层的三角形 显然是选择靠内侧的两个点更优
所以拓扑排序 每次更新度数为2的点就行了
不过还有另一种做法
找到一个最大独立集 之后减掉 弦图区间图应该可做 等这两天看看补补坑
BZOJ 4002: [JLOI2015]有意义的字符串
BZOJ 2956: 模积和
这个应该是经典套路了吧,数论分块
BZOJ 5278: [Usaco2018 Open]Out of Sorts
这是一道智商题,BJ又不会。。。
题面是对数组双向冒泡排序,问几轮后有序。
记 M_i 表示前 i 个里在排序后有几个不在前 i 个里,取 M_i 最大值即为答案。
考虑模拟一遍,发现每个 M_i 不为0一定-1。