不断更新。。。

一些感想。。。

感觉要写一个类似导引的东西。。。。只有简要题解

\(\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\)

  1. 对于区间长但原根小的,用\(O(Pk)\)的方法,先找到一个原根\(g\)(观察数据即可),然后把形如\(g^i,i|P-1\),的筛掉,枚举\(P-1\)的每个质因子分别筛
  2. 对于区间短但是原根大的,用\(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\)的联通块数量

那么答案就是

\[ans=\sum_{i\in V}f(i)^k-\sum_{i\in E}g(i)^k \]

分别对子树内和子树外进行\(dp\),用长链剖分优化\(dp\),并使用可回退化数据结构优化至\(O(n)\)

对于乘法逆元,因为只需要一些特定的值,考虑直接\(O(n+\log P)\)预处理。


posted @ 2019-08-13 16:20  PaperCloud  阅读(249)  评论(0编辑  收藏  举报