不断更新。。。
一些感想。。。
感觉要写一个类似导引的东西。。。。只有简要题解
\(\times\)的就是蒟蒻放弃的题啦
D1T1 | D1T2 | D1T3 | D2T1 | D2T2 | D2T3 | |
---|---|---|---|---|---|---|
ZJOI2019 | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) |
SNOI2019 | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\times\) |
十二省联考 | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) | \(\checkmark\) |
upd:2019.8.13
开始练习noip了,近期可能会比较少接触省选/省选+的题了
感觉还是做不好noip题啊,深感自己的菜。。。
高二啦,暑假作业好多
😦 我好颓啊
upd:2019.8.17
貌似大概率这篇博客要咕了
可能暑假还没开始就结束了吧
upd:2019.8.30
暑假真的结束了。。。
1.ZJOI2019
1.1麻将
blog
今年的麻将题真多,先列出dp式子,发现状态很少,考虑用map给每个状态赋值
对于求\(E(x)\),可以先计算\(\sum num(x)\),其中\(num(x)\)表示值大于等于\(x\)的情况数
1.2线段树
blog
算是一道比较有特色的题目
\(f_x\)表示\(x\)号节点有标记的线段树占的比例
\(g_x\)表示\(x\)号节点到根路径上有标记的线段树占的比例
根据线段树区间修改的性质,进行转移
1.3minmax搜索
blog
不妨先求出答案的前缀和
首先发现让\(W\)值变大或变小所要更改的节点是没有交的
分别求出可以让\(W\)变大和变小的概率,(为了方便计算),求出不可以让\(W\)变大以及可以让\(W\)变小的概率,这样两者的转移是一样的
发现\(R\)每增加\(1\),只会有两个叶子节点发生更改,所以采用ddp的思路
1.4开关
blog
我都不会生成函数啊,谁来救救我
是这样的:
首先先求出可重复到达目标状态和回到原状态的概率的\(EGF\),将其转化为\(OGF\)
然后相除就是所要的答案的\(OGF\),求导就可得到答案,但是求导好难啊。。。
1.5 语言
blog
相当于求出对于每个点,经过它的所有链的端点的虚树的大小(显然这些链的并就是一个树)
求虚树前先加上根节点,树上差分,在端点和端点的\(lca\)的父亲处进行加点和删点操作,线段树合并
1.6 浙江省选
blog
依次求可以为第\(i\)名的直线
每次求一次半平面交,对在上面的直线二分求出覆盖的区间,最后得到可以为第\(i\)名的直线
斜率是有可能一样的。。。
2.SNOI2019
2.1 字符串
code
没有博客,直接比较相邻的字符即可
2.2 数论
code
没有博客
对\(0\)到\(Q\)之间的数按照模\(P\)意义分成\(gcd(P,Q)\)个环,每个环对在\(B\)中的数进行前缀和处理
枚举\(A\)中的数,找到对应的环,直接计数即可
2.3 通信
blog
首先建出一个费用流模型,考虑如何优化建图
因为代价都是形如\(|a_i-a_j|\),有位置要求,所以按位置的区间进行分治
又因为是绝对值,所以还需要对值进行排序,用上前后缀优化建图的套路
2.4 纸牌
blog
矩阵快速幂,用一个大小为\(3*3=9\)的状态表示\(i\)和\(i+1\)开始的顺子的数量
把\(dp\)转化为矩阵乘法对于已经有初始牌的数单独转移即可
2.5 积木
blog
模拟题,先将空格移到目标位置后直接搜索,找到不合法的部分(这个部分必然会成环)
过程有点像求欧拉回路
3.十二省联考
3.1异或粽子
blog
对于每个右端点,找到它的第一大区间,扔进\(pq\),每次取出堆顶元素
还得有个数据结构支持查找当前第\(k\)的区间,\(01trie\)即可,并不需要可持久化,因为可以求出前\(2k\)大的
3.2字符串问题
blog
每个\(A\)类串是否能作为另一个串的后继,连边,跑最长路,如果有环就输出\(−1\)
\(A\)类串向其能够支配的\(B\)类串连边,然后\(B\)类串再向能作为其前缀的\(A\)类串连边
对后者,直接建一个反串的后缀\(parent\)树来对它进行优化建图
3.3骗分过样例
blog
\(1\_998244353\):求\(19\)的幂,因为次数可能很大,所以直接对\(P\)的欧拉函数取模
\(1?\)/\(1?+\):要猜模数,分别是\(1145141\),\(5211600617818708273\)
\(1wa\_998244353\):不能快速幂了,需要直接乘。。。发现循环节很短,考虑直接求出来
\(2p\):区间求质数, \(Miller\_ Rabbin\)即可
\(2u\):区间求莫比乌斯函数,先把\(10^6\)内的质数筛出来处理区间的数,大于\(10^6\)的质因子最多两个,先判断剩下的积是不是完全平方数,再用\(MR\)判断是不是质数
\(2g\):区间求原根,设\(P\)的质因子有\(n\)种
- 对于区间长但原根小的,用\(O(Pk)\)的方法,先找到一个原根\(g\)(观察数据即可),然后把形如\(g^i,i|P-1\),的筛掉,枚举\(P-1\)的每个质因子分别筛
- 对于区间短但是原根大的,用\(O(len \cdot n\log P)\),枚举\(x^{\frac{(P-1)}{p_i}}\),判断是否模\(P\)余\(1\)
3.4皮配
blog
看作是二元生成函数\(1+x^{s_i}+y^{s_i}+x^{s_i}y^{s_i}\)的积
分成两部分,对于没有限制的直接乘,有限制的只有\(30\)个城市,暴力它们的生成函数之积。
3.5春节十二响
blog
树上启发式合并
已经得到了每个子树的分配方案,此时根节点自成一个集合。
对剩下的进行合并,显然都是将最大的和最大的来合并,次大的和次大的合并
3.6希望
blog
首先,如果直接计算每个点的贡献就会算重,考虑容斥
发现一个合法方案的合法点集是个联通子图,满足\(V(S)-E(S)=1\)
所以可以把点的贡献和减去边的贡献和
设\(f(x)\)表示以\(x\)为中心的深度不超过\(L\)的联通块数量,\(g(<x,y>)\)表示以\(x,y\)为中心深度均不超过\(L\)的联通块数量
那么答案就是
分别对子树内和子树外进行\(dp\),用长链剖分优化\(dp\),并使用可回退化数据结构优化至\(O(n)\)
对于乘法逆元,因为只需要一些特定的值,考虑直接\(O(n+\log P)\)预处理。