20190423模拟

前言

CF又掉分
困得又不行
拿什么拯救自己

T1

有一个显然的思路是枚举中位数
如果长度是奇数的话可以直接枚举
否则,一个性质就是中位数一定是数值大小相邻的两个数的平均数
然后似乎是满足三分性的,窝认为他不满足就写了个 l o g 2 log^2 log2成功自闭

T2

A A A序列的 a a a连向 B B B序列的 b + n b+n b+n,目标是给边定向使得一个点只有一个入度
我怎么愚蠢的还认为是基环树
图一定是个二分图,环一定只是简单环,那么就变到了环上的问题
显然贡献只有两种取值, 70 p t s 70pts 70pts可以直接暴力背包
注意如何用多重背包优化
你先强行全部选 0 0 0,然后是否修改就是一个 01 01 01背包问题
100 p t 100pt 100pt似乎是用总和在 S S S,不同取值不会超过 S \sqrt S S 来做一个多重背包
先咕

**T3

窝不会容斥啊
发现题目有两个限制,这时候一般是要先去掉一个限制或者两个限制本质相同来做
这里我们采取先去掉一个限制的做法
不妨先去掉列的限制,即之后讨论行的做法都在满足列互不相同的情况下开始的
g ( i ) g(i) g(i)表示由 i i i行组成的 m m m列矩阵,满足列互不相同的方案数
显然是 Π j = 1 i ( C i − j + 1 ) \Pi_{j=1}^{i} (C^i-j+1) Πj=1i(Cij+1)
考虑如何求 f ( i ) f(i) f(i)表示由 i i i行组成的 m m m列矩阵,满足行列均互不相同的方案数
一般都是要套上一个容斥/反演,这里我们可以枚举有多少组本质不同的行对 g ( n ) g(n) g(n)的贡献
式子写出来就是
g ( n ) = ∑ i = 1 n S 2 ( n , i ) f ( i ) g(n)=\sum_{i=1}^{n}S_2(n,i)f(i) g(n)=i=1nS2(n,i)f(i)
这里 S 2 ( i , j ) S_2(i,j) S2(i,j)表示的是第二类斯特林数
然后似乎直接斯特林反演一下?有
f ( n ) = ∑ i = 0 n ( − 1 ) n − i S 1 ( n , i ) g ( i ) f(n)=\sum_{i=0}^n(-1)^{n-i}S_1(n,i)g(i) f(n)=i=0n(1)niS1(n,i)g(i)
然后就可以 n 2 n^2 n2了??

**T4

琛老爷的东西太高妙了窝这种乡下人只能想自己的通俗理论
显然我们需要计数长度为 n K nK nK的序列 a a a满足对于任意 i &lt; n K i&lt;nK i<nK,都有 a i a_i ai a i + 1 a_{i+1} ai+1间有边相连
考虑容斥
注意到无边相连的情况当且仅当他们在复制的图中的同一个连通块,且他们直接有边相连。此时的反图中他们一定无边相连,故只需要考虑每个连通块有多少个无边相连的即可
如果能计算出 f ( i ) f(i) f(i)表示至少有 i i i个位置满足相邻两个之间无边相连,那么显然可以 − 1 k -1^k 1k容斥
先考虑对于一个连通块如何计算出来,可以先把钦定无边相连的位置看成一个块,这样最后至少就有 n − 块 个 数 n-块个数 n个位置不存在有边
设一个 f [ i ] [ j ] [ m a s k ] f[i][j][mask] f[i][j][mask]表示已经分成了 i i i个块,当前最后一个位置是 j j j,被选了的点状态为 m a s k mask mask
转移枚举下一个点 k k k,如果 j , k j,k j,k之间有边相连,显然他们不能归到一个块,只更新 f [ i + 1 ] [ k ] [ m a s k ∣ b i n [ k ] ] f[i+1][k][mask|bin[k]] f[i+1][k][maskbin[k]]
否则,他们允许被归到或者不归到同一个块,再更新一个 f [ i ] [ k ] [ m a s k ∣ b i n [ k ] ] f[i][k][mask|bin[k]] f[i][k][maskbin[k]]即可
那么最后可以得到一个数组 A A A表示至多有 i i i个块的方案,即至少有 n − i n-i ni条边不合法
不同联通块之间互不影响,可以直接对 A A A n n n N T T NTT NTT,先开够 n K nK nK的空间做一发快速幂即可
最后枚举一下总共至多有多少个块 ( − 1 ) k (-1)^k (1)k容斥即可
注意我们 d p dp dp出来的数组是有序的,而联通块之间是无序的,所以 A [ i ] A[i] A[i]需要乘一个 i ! − 1 i!^{-1} i!1,并在最后乘上 j ! j! j!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值