6/11 闲话
学别人推个歌:
逃避行——Imase
歌词
さよなら 逃避行昨日の酔いも 覚めない君と
抜け出す街を
行こう
背負い込んだ重い過去も
飲み込んだ思いすらも
乗り越えた 乗り越えた 二人で
錆びついたこの心も
夢を見たあの気持ちと
飛び込んだ 飛び込んだ 二人で
さよなら 逃避行
昨日の酔いも 覚めない君と
抜け出す街を 行こう
さよなら 逃避行
「夢を見たいの」泣き出す君と
抜け出す街を
行こう 行こう 行こう
大それたものじゃないの
泣いていたこの思いも
ただそれは
ただそれは
蓋をしたの
誰の声も聞こえぬほど
君も溺れてく
夢を見たの 戻れないの
さよなら 逃避行
「君と居たいよ」
褪せない 日々と
抜け出す街を 行こう
さよなら 逃避行
「明日を見たいの」
先立つ 君と 抜け出す街を
行こう 行こう 行こう
今天打模拟赛,被虚空参赛的上一届薄纱
T1
求 \(n\) 个点,每个点度数小于等于 \(4\),且根节点度数小于等于 \(3\) 的无标号有根树个数。
应某人要求,详细写一下这道题
这道题的状态设计为 \(f_{i,k}\) 表示有 \(i\) 的点且有 \(k\) 个子树的方案数
首先枚举的是转移的点的子树大小 \(j\),其全部的方案数为 \(T=\sum\limits^3_{i=0}f_{j,i}\),这样能保证之前转移的子树大小小于之后转移的,避免重复
然后枚举被转移的点的子树大小,也就是转移的点的父亲子树大小 \(i\),被转移的结点的子树个数 \(k\)
对于一个被转移的结点而言,它可能有多个节点数相同的子树,所以枚举被转移的点有多少个与 \(j\) 子树大小相同的子树,其数量为 \(h\)
如果有多个结点相同的子树,直接乘发现会重复计算,所以这个方案数为 \(\binom{T+h-1}{h}\)(\(n\) 个方案数中选可重复的 \(h\) 个方案的方案数为\(\binom{n+h-1}{n-1}\))发现这个东西可以拆下式子 \(O(1)\) 求
对于除了所转移子树的部分的方案数为 \(f_{i-jh,k-h}\),把它和上边的组合数乘一下累加进 \(f_{i,k}\) 即可
inline int H(int A,int M){
if(M==1) return A;
if(M==2) return (A+1)*A%mod*inv2%mod;
if(M==3) return (A*A%mod+A*(A-1)%mod*(A-2)%mod*inv6%mod)%mod;
}
inv6=qpow(6,mod-2);inv2=qpow(2,mod-2);
f[1][0]=1;
for(int j=1;j<n;j++){
int tmp=(f[j][0]+f[j][1]+f[j][2]+f[j][3])%mod;
for(int i=n;i>j;j--)
for(int k=1;k<=3&&k<j;k++)
for(int h=1;h<=k&&h*j<i;h++)
f[i][k]=(f[i][k]+H(tmp,h)*f[i-j*h][k-h]%mod)%mod;
}
cout<<(f[n][0]+f[n][1]+f[n][2]+f[n][3])%mod;
给定一个串,由
0
,1
,2
,*
,?
组成。求将?
替换成其他字符中的任意一个,使原串合法的方案数。将*
视为雷,数字就是数字,合法为扫雷地图的合法性。
考场上 dp 数组状态设计的有些复杂,打炸了
设 \(f_{i,0/1/2}\) 为第 \(i\) 个位置,后面要有 \(0/1\) 个雷,或者这个位置为雷的方案数
考虑对于每种字符每个状态的转移:
- 如果该点为
0
,则转移为 \(f_{i,0}=f_{i-1,0}\) - 如果该点为
1
,则转移为 \(f_{i,0}=f_{i-1,2}\),\(f_{i,1}=f_{i-1,0}\) - 如果该点为
2
,则转移为 \(f_{i,1}=f_{i-1,2}\) - 如果该点为
*
,则转移为 \(f_{i,2}=f_{i-1,2}+f_{i-1,1}\) - 如果该点为
?
,上述转移累加即可
初始状态为 \(f_{0,0}=f_{0,1}=1\) 后一个是为了第一个位置能为雷
T3
已知两个数 \(x,y\) 求有多少个正整数不能被 \(ax+by,a\ge 0,b\ge 0\) 表示。(\(x,y\ge 10^8\))
考场上打了个表找了规律之后跑路了
如果 \(\gcd(x,y)\ne 1\) 的话一定是无数个的,因为存在无数个 \(\gcd(x,y)\nmid k\)
从小凯的疑惑可以得出最大不能被表示的数 \(N=xy-x-y\)
有一个优秀的性质:
对于 \(1\le C\le \left\lfloor \frac{N}{2}\right\rfloor\) 来说,要么 \(N-C\) 有解,要么 \(C\) 有解
证明:
对于都有解的情况一定不成立:因为如果 \(N-C\) 与 \(C\) 同时成立时,\(N\) 成立,矛盾
对于 \(ax+by=N\) 来说,能找到其一组特解:\(a=y-1,b=-1\) 对于这个特解来说,可以找到关于 \(ax+by=n,n\le N\) 的一组通解,即:\(0\le a \le y-1\),\(b\le -1\),容易得出,这组通解是不能被表示的
然后考虑 \(N-C=xy-x-y-ax-by=x(y-1-a)+y(-1-b)\),因为 \(y-1-a\ge 0,-1-b\ge 0\),所以 \(N-C\) 能被表示,证毕
所以不能被表示的数个数为 \(\left\lceil \frac{N}{2}\right\rceil\)
给出一个 \(1\) 到 \(n\) 的排列,现在对这个排列序列进行 \(m\) 次局部排序,排序分为两种:
0 l r
表示将区间 \([l,r]\) 的数字升序排序1 l r
表示将区间 \([l,r]\) 的数字降序排序最后询问第 \(q\) 位置上的数字
对于一个数来说,把大于等于它的赋值为 1
,小于它的赋值为 0
,可以发现,区间升序 / 降序排序即为将这个区间所有的 1
移到右边 / 左边,发现可以线段树维护区间求和 + 区间赋值,然后操作完后对于第 \(q\) 位置的数字,发现其具有单调性,然后二分答案即可