摘要:
题面 "题目传送门" 解法 可以发现,每一次只要考虑后缀的一部分即可 设$f_{i,j,x,y}$表示前$i$个人中$j$个是男生,后缀中男生数 女生数最大为$x$,女生 男生最大为$y$的方案数 建议从前推后 时间复杂度:$O(nmk^2)$ 代码 cpp include define Mod 1 阅读全文
摘要:
题面 "题目传送门" 解法 直接区间dp即可 时间复杂度:$O(16n^3)$ 代码 cpp include define N 210 using namespace std; struct Node { int x, y; } a[5][N]; int s[5], p[5][5][5]; bool 阅读全文
摘要:
题面 "题目传送门" 解法 既然有异或,那么我们把每一位单独考虑一下 先枚举是二进制的第几位,然后设$f_i$表示点$i$这一位为1的概率是多少 显然,可以列出一个方程 注意,自环的出度不能被计算2遍 高斯消元解这个方程即可 最后答案为$\sum2^i×f_{1,i}$ 时间复杂度:$O(30n^3 阅读全文
摘要:
题面 "题目传送门" 解法 先把边转化成区间 其实我们只要计算$\sum_{i=l}^{r 1}\sum_{j=i+1}^{r}sum(i,j)$ 把式子拆开,可以得到$(l+r)\sum w_i i (l+1)(r 1)\sum w_i \sum w_i i^2$ 用线段树分别维护这三个值即可 时 阅读全文
摘要:
题面 "题目传送门" 解法 第一问就是线性基的裸题 第二问也很类似,从低位向高位枚举,如果线性基上这一位有数,那么直接异或后返回 时间复杂度:$O(n\ log\ a_i)$ 代码 cpp include define int long long using namespace std; templ 阅读全文
摘要:
题面 "题目传送门" 解法 设$f_i$表示经过点$i$的期望次数 然后就可以通过边的关系搞出一个方程组,高斯消元一下 对于求一条边$(x,y)$的概率,即为$\frac{f_x}{out_x}+\frac{f_y}{out_y}$ 然后按照概率大小排序,小的用尽量大的编号 时间复杂度:$O(n^3 阅读全文
摘要:
题面 "题目传送门" 解法 设$f_{i,j}$表示总共$i$个人,第$j$个人最终获胜的概率 枚举当前选择的是哪一张卡,那么就知道下一轮被淘汰的是谁了,假设是$x$ 显然,下一轮的庄家就是$x$的下一个人 如果$x=j$,那么可以不用管这种情况 如果$x j$,那么$j$在下一轮的编号为$i x+ 阅读全文
摘要:
题面 "题目传送门" 解法 设$(x,y)$表示第一个人在$x$房间,第二个人在$y$房间,然后列一个方程组即可 直接用高斯消元解一下就行了 时间复杂度:$O(n^6)$ 代码 cpp include define double long double define eps 1e 9 define 阅读全文
摘要:
题面 "题目传送门" 解法 求无向图生成树个数,可以直接通过Matrix Tree定理求 但是$n≤100$,精度肯定爆了 所以先打个表找个规律: $1,5,16,45,121,320,841…$ 可以发现,奇数项感觉都是完全平方数,偶数项和完全平方数似乎也有点关系 ~~仔细研究表,~~发现$F_i 阅读全文
摘要:
题面 "题目传送门" 解法 考虑补集转化,我们只要求正确的最大个数即可 显然,一些明显就是错误的东西可以直接排除 对于$(x,y)$相同的位置一定相等 那么我们就可以把$(x,y)$相等的并在一类 然后考虑一下$(x,y)$怎么转化,显然就是那一个数在整个数列中排名对应的区间,为$[x+1,n y] 阅读全文