省选模拟(11-20)

省选模拟11
A. 组合数问题
B. recollection
两字符串的Lcs就是lca的深度,Lcp就是后缀树上两字符串的lca的长度。
在后缀树上线段树合并。每个节点表示dfs序是这个的节点,由于dfs序相邻的点的lca深度更大,因此维护线段树在子节点合并信息时更新答案。
线段树维护lpos,rpos,注意更新的答案可能是子节点的信息,那么由于len的长度递减因此答案只会更差不影响答案。
C. comparison
需要一个数据结构,满足查询排名,动态插入,区间修改。
平衡树维护。然而每个元素的两维是另两个元素,单纯的平衡树记录排名已经无法维护了。
考虑比较时在线log查询排名就解决了,注意没有后继的情况要特判掉。
数学专题测试4
A. 猜拳游戏
题目描述
YYC和他的妹子nayC在玩石头剪刀布,但是这太简单了,于是现在YYC和nayC在玩一种新的猜拳游戏。游戏分为每轮进行,每轮游戏共有n局石头剪刀布的游戏。一局若分出胜负则胜者得1分,平局双方都不得分。n局结束后,得分高者赢得此轮的胜利。如果双方得分相同则此轮作废。
但是只有1轮的话还是太无聊了,于是他们又加强了游戏
任意时刻如果nayC比YYC多赢m1轮,则nayC获胜;如果YYC比nayC多赢m2轮,则YYC获胜。
为了表现自己的绅士风度,YYC把他每一局出石头,布,剪刀的概率告诉了妹子,分别为ri,pi,si,而且对于不同的两轮中的同一局YYC出石头剪刀布的概率是相等的,现在YYC想问你他的妹子的赢的最大概率是多少?因为nayC开心就好。
有多组数据。
输入格式
对于每组数据:
第一行包含三个正整数n,m1,m2,含义如题目描述。
接下来n行,每行三个整数ri,pi,si分别表示YYC该局出石头,布,剪刀的概率的百分数,保证ri +pi +si =100
输入数据以0 0 0结束
输出格式
对于每组数据输出一行一个实数表示nayC获胜的最大概率,四舍五入保留5位小数。
你品,你仔细品就会发现,概率和胜率不是很一样。
题解:
得分相同此轮作废,也就是说这轮妹子获胜的概率实际是\(\frac{p}{p+q}\),其中p为妹子一轮获胜的概率,q为汉子获胜的概率。
设a[i]表示妹子胜利轮数-汉子的差为i时妹子获胜的概率。--->又名胜率... 可得转移\(a[i]=\frac{p}{p+q}a[i-1]+\frac{q}{p+q}a[i+1]\)
Q:为什么能想到这么神的定义鸭
A:qaq
我想不到的是,只需要\(\frac{p}{p+q}\)所以不需要去求出p和q的实际值。
考虑到\(\frac{p}{p+q}=\frac{1}{1+\frac{q}{p}}\)是一个分数的形式可以二分\(\frac{q}{p}\)的大小=r
需要判断的是是否有q-pr>=0,可以想成是汉子的价值是1,妹子的价值是r。
设dp[i][j]表示i轮差为j的q-pr的最大值。然后初值dp[n][1->n]=-r,dp[n][-1->-n]=1,转移倒推回dp[0][0]
Q:为啥倒推鸭
A:因为一局的胜率实际只有1/0,只有这局结束才可以得到,那么多局概率的叠加也只能从后往前递推得到。
Q:好大神鸭(小声
A:qaq
View Code
B. inequ
C. 生成树
题意:有红绿蓝三种颜色的无向边,求绿边<=a,蓝边<=b的生成树个数。
错解:想从容斥方向下手,枚举绿边蓝边个数奇加偶减,但还要枚举哪几条边就变成了阶乘级别,还不如裸爆搜。
题解:求无向图生成树个数也就会个矩阵树定理辽,有个变元矩阵树定理是这样的。
变元矩阵树定理:
定义Kirchhoff矩阵K,其中
\(K_{ii}\)为所有与i相连的边的权值和
\(K_{ij}\)为连接i与j的边权值和的负值
那么\(\sum\limits_{tree\in T}\prod\limits_{E\in tree}val(E)\),T为生成树集合,就是生成树的边积的和
然后矩阵树定理就是把
\(K_{ii}\)定义为i的度数
\(K_{ij}\)定义为i是否与j(是则为-1,否则为0)
这样每棵生成树的贡献就是1了,也就是生成树个数
给绿蓝边赋上边权,设为x,y。
那么求出的\(ans=\sum_{i=0}^{n-1}\sum_{i=0}^{n-1}r_{i,j}x^iy^j\)\(r_{i,j}\)是绿边a个蓝边b个的方案数
\(x^iy^j\)已知,ans可以求出来,我们想求出\(r_{i,j}\),就把他们当作变量\(x^iy^j\)当作系数,高斯消元解出来。
要注意这道题如果用高斯消元常数很大,如果不考虑绿边+蓝边<n个而是绿边n-1个蓝边n-1个,也就是说范围大了一倍,那么由于O(\(n^6\))的复杂度就会T成暴力分。
View Code

图论专项测试
A. center
floyd求两点间最小距离,枚举每条边作为答案,三分最优位置更新答案,(⊙o⊙)?n check
View Code
B. escape
这道题我调到了自闭...
题意:求1到n的严格次短路的简单路径,并且若路径是最短路边那方向必须与最短路方向一致。n=1e5 m=1e5 w=1e3
题解:发现最优次短路一定只有一段不是最短路,如果有多段完全可以把中间的路换成最短路,路径长度会更小。
那么这条路径就可以表示成最短路+不是最短路+最短路的形式。
考虑暴力的形式无非就是枚举不是最短路那段的起点a终点b,从1->a,a->b,b->n跑简单路径,a->b不能跑最短路上的边。
二进制分组分出S,T两个集合优化暴力。
Q:边权都是正的,为啥会有非简单路径鸭
A:DeepinC的一个很好的例子:4 4 1 2 1 2 3 1 1 3 1 1 4 666 a=1 b=2 1->a=0 a->b=1 b->n=667 走重了1 2那条边
只走最短路起到的作用是1->a,b->n不会和a->b有边相同
所以要把最短路定向再跑Dijkstra处理出来1->x,y->n的只经过1->n的最短路上边的最短路,这里我调了一天!!其实就是思路错辽...
Q:如何快速统计S,T每个点对的贡献鸭
A:新建0,n+1两个点操作lnk(0,i,ds[i])/lnk(i,n+1,dt[i]),然后建出来不是最短路的那些边跑从0到n+1的最短路出来就好辽...
真是气煞我也
C. chip
省选模拟12
A. Colorado Potato Beetle
离散化后把每个点表示成一条线段\([x_i,x_{i+1}-1]\),把已经被杀虫的位置打标记,注意走杀虫剂路径时把[L,R]要离散化成L,R+1两个点。
从(0,0)开始出发bfs模拟虫侵害的过程,最后所有没有被侵害的线段更新答案。
View Code

B. Distinct Paths
由于n+m-1>k就可以直接输出,所以数据其实很小,可以爆搜。
剪枝优化:维护每种颜色的出现次数(开始就赋予的颜色也算在内),所有此时第一次出现的颜色就可以算作同种情况;如果剩下的颜色不够从这个点到终点了,就一定不合法。
View Code

C. 回忆树
答案可以转换为(u,lca)+经过lca+(lca,v)三部分的答案,那么(u,lca),(lca,v)可以通过把串插进正反询问串ac自动机跑原树得到答案,经过lca 的串长不超过2*sigma,所以可以直接hash暴做。
于是把询问串放入ac自动机建出fail树找到dfs序,把那两种转化成差分,把原树dfs,到达这个节点时就是一条链,在ac自动机上此时的节点处add(i,1),回溯时add(i,-1)。查询操作就是查询节点子树和。
View Code

省选模拟13
A. 同桌的你
题意:每个同学有喜欢的对象,求一种安排同学的方案。输出匹配数,男女,方案。n=1e6 T=3
每个同学都有自己喜欢的对象,也就是这是一个奇环树,我们要做的便是找出相邻点的最大匹配来。
输出方案,就要维护出来每个同学如果匹配的话的对象是谁,然后从根向下根据dp的相关转移记录方案。
考试时候死网络流里出不来了,根本没想n个点n条边的相关性质...
B. 大水题
题意:求一个最大区间使得所有出现过的颜色个数>=k&&数量都相等。n=1e5
打的是一种题解介绍过不去但在hz(很正)oj过了的算法。
一段区间满足第二个条件就是前缀差分相同,2^8枚举不同的颜色集合在每一段内用hash表存储状态更新答案。
调的很自闭,数据水偏偏最后一个数据又十分强劲...
View Code

C. 佛罗里达
题意:每个点对有一个矛盾值,求出一种方案满足分成两堆后两堆的矛盾值最大值之和最小。n=250
二分答案的“至少",然后搜索判断是否有可行解,并通过在线更新最大值进行剪枝。
考试时候想的是二分两边矛盾值的最大值...没什么用处...
View Code

省选模拟14
A. 开车
题意:有m条道路,每条道路的边权是2^i,求最小值添若干条边有欧拉回路。n=4e5 m=5e5
其实化简题意后就显然了很多,因为边权特殊性,优先选择前边的道路一定更优,\(\sum_{i=0}^n2^i<2^{n+1}\)
构建出最小生成树,在树上dfs,若某个儿子度数为奇,就加上这条边的权值。
View Code

B. 上分
题意:有一个杨氏矩阵,让求这个杨氏矩阵的方案数。
钩子定理,中间的下边的右边的分别处理。
那个平行四边形转长方形(x,y)->(x,y-x)很想不到,类似的还有菱形转正方形...
View Code
C. 隔膜

省选模拟15(联考)
A. 倒计时
题意:有个数,每次可以减去所有位上最大的一个数,求最小次数。n=1e18
题解:设dp[i][j]表示前面的最大值是i,当前数是j的最小次数,从这个数的最高位一次抽一个\(10^i\)进行转移。
其实不是很懂。但代码颓出来了。
View Code
B. 旅行路线
不用讲
View Code
C. 流浪者
题意:n,m的网格图,只能往下,右走,K个障碍点,碰到障碍点s=(s+1)>>1,求最后s的期望。s=1e6 n,m=1e5 k=2000
题解:与之前做过的noip模拟不同,此题有了次数要求,又因为s很小所以可以只记录前25次遇到障碍点的方案数,剩下的情况一定答案都是1.
转移:设dp[i][j]表示到第i个特殊点,已经经过恰好j个特殊点的方案数。
  \(dp[i][j]=C(x[i]+y[i],x[i])-\sum dp[k][j]*way(k,i)-dp[i][0~j-1]\)
含义可以理解为总方案数-至少为j+1个点的方案数-少于j个点的方案数。
D. 摆棋子
士兵占领
View Code

省选模拟16(联考)
A. GCD和LCM
题意:求\(\sum_i^n\sum_j^mlcm(i,j)[gcd(i,j)<=a]\)
与裸题不同的是有了一个a的大小,那就让a单调然后树状数组维护分块即可。
ps.脑子没了
View Code

B. 平面图
平面图转对偶图,启发式分裂,有时间回来打。
C. 路径
省选模拟17(联考)
A. 选择
题意:n个点,m条边的无向图,要求支持删边,查询两点间是否存在两条边不相交的路径.n=1e5 m=1e5
题解:发现存在两条边不相交的路径即在一个边双内,所以题目要求维护边双。
时光倒流,维护以存在时间为边权的最大生成森林,删边变加边,如果当前边是返祖边,就把两点间路径在线段树上设1.
查询时查询两点间路径是否为一个边双。
由于要求查询路径,用树剖维护O(nlog)
View Code

B. 划分序列
题意: 有n个元素有正有负,要求划分成K段使得最大值最小。n=5e4 |ai|=3e4
题解:二分最大值。
可以感性理解的是如果找到可以分成的最多段和最少段,那么就可以判断K是否合法。
所以O(nlog)BIT维护最多段最少段DP进行check。总复杂度O(nlog^2).
View Code

C. 生成树求和
题意:对于无向图每个生成树G的权值是三进制下不进位加法得数,求出所有生成树得数的和。n=40 ai=1e4
和之前做到生成树思路一样的做法是按位考虑把边分成了0 1 2三种情况,就可以同理生成树用二维拉格朗日插出系数。O(n^4log)听说高斯消元n^5过不去
题解:只需要知道1边和2边的总和就是答案,就只需要设1边边权为x,那么2边边权为x^2就可以变成一维的了.O(n^2log)
然而不会二维拉格朗日插出系数...题解不是很理解...
D. 圆圈游戏
题解就在上边...
View Code

省选模拟18(T4题目更正见群里)
A. 编码
说是原题...
题意:n个串,每个串最多有一个位置为'?'可选0或1要求不能形成前缀关系,求是否存在可行方案.n=5e5 \(\sum\)len=5e5
题解:2-sat用于处理这种每个点有两种状态只能选择一种状态求可行方案的问题。
考虑暴力就是n^2枚举两串建边跑2-sat。
优化就是建一颗trie树那么把'?'建成0和1都插入trie中要求trie上节点要和祖先和子树都建边。
一开始我想只要和最近的合法祖先(就是有串结尾是它)建边这样一层一层垒上去,画画图就会发现它并不能累加。
考虑新建节点优化建边,对每次插入新建两个节点(lst为最近合法祖先)(id为当前串的标号)(P为新建节点)

画图可以发现,左右两侧的新建节点们串成了两串,从而可以访问到之前的所有祖先和向下的所有儿子,而lst与id连边又弥补了当前点的边需求。建边就好了。
p.s.在insert中会新建节点所以在外面新建节点时不能insert完继续想当然的用P和P^1了...
View Code

B. 哈密顿回路
题意:求一条哈密顿回路长度为L.n=14 L=1e15
题解:发现这种查询路径长度的东西不好整,所以meet in the middle 就好了。
注意一条哈密顿回路一定经过1,所以可以拆成两半枚举交界点。
View Code
C. 旅行
好题先咕了。
D. 猎人杀

题解:倒着DP。
设f[i][j]表示还剩i人此时j被击中,0号活着的概率。n=2000
转移\(f[i][j]=\frac{1}{2}f[i][sol(i,j+k)]+\frac{1}{2}f[i-1][sol(i-1,j+k-1)] j!=0\)
而j=0只有前面那一项转移,因为dp含义是0必须活着。
转移出环,高斯消元O(n^4)不是正解。考虑每一项只有另一项转移过来,所以它的转移是一个若干个环的形式,把它在环上跑成自己即可。即g[i]=kg[i]+b
时间O(n^2).
p.s.开始时的b数组并不是把自己当作变量的b数组...需要重新开一个...
View Code

省选模拟19(联考)
A. 鱼死网破(clash)
题意:x轴上下有n,m点,中间有k条线段,求x轴下方点每个能看到几个上方点。强制在线。n=m=1e5 k=50
题解:只需要求出不能看到的上方点再一减就是答案。
对于每个x轴上方的点,找到所有墙,按照极角排序,合并相交的墙。(本来一个鱼头胖可能会被多条大坝放入,为了保证是为了在任何角度观察这头鱼头胖都最多只会有一面水墙包含这个鱼头胖)对于每一个端点引一条直线,左端点的直线 权值是+1,右端点是-1,可以发现一个点不能看到的点数等于这个点左边的射线的权值和。
观察到这些直线都经过至少一个墙的端点,可以将这些直线按照经过的端点分类,再按照极角序排序后二分查询。:)因为一个点对于一个胖头鱼来讲只会在一条线段处相交
复杂度O(k(n+m)log)
p.s.注意vector中可以一个向量都不选,所以二分下界要设成-1...
p.s.数组不清空,*****
View Code
B. 漏网之鱼(escape)
C. 浑水摸鱼(waterflow)
省选模拟20(联考)
A. Ring
题意:求区间边能否构成环。n=m=3e5
和lct专题题目五很像的一道题,那道题是求区间边构成的联通块数,改一改就可以用在本题。
题解:对于l=1->m,容易发现构成环的r有单调性,所以用单调指针维护,再用lct支持加删边。
View Code
B. Exchange
题意:给定一个序列,要求支持三种操作:区间加,把[a2^t,(a+1)2^t)和[b2^t,(b+1)2^t)交换,区间求和。强制在线 n=1e8 m=1e5
题解:把序列扩展成[0,2^t)形式,然后发现两个区间是线段树上的节点就可以直接swap了。
View Code
C. Match

猜你喜欢

转载自www.cnblogs.com/hzoi2018-xuefeng/p/12347714.html
今日推荐