【考试总结】2022-07-27

Sample

使用 Lagrange 乘数法来处理本题中最值问题。证明不会,过程就是列出被求最大值函数 f(p1,pn) 表达式 2i=1nipi(1pi),由 i=1npi=1 的限制将问题转化成 F(p1,pn,λ)=f(p1,pn)+λ(1+i=1npi) 的最大值求解。

对于每个参量求偏导,本题中可以得到 pi=12+λ2i ,就可以得到 λ 的表达式。

乍一看做完了,但是还没有处理 0pi1 的限制,能处理不等约束的做法我看不懂,但是 pi 的表达式形如关于 i 的反比例函数,那么可以让一个前缀抵消成 0 。二分这个前缀的长度,找到 i=Rnpi1 的最小 R 再求答案即可。求答案时 λ 的值直接对后缀的系数均分。

也有不带 log 的做法,就是双指针扫出来所有的二分结果

Det

做行差分再做列差分可以将每个区间带来的影响变成 al,l,ar+1,r+1 处加一,al,r+1,ar+1,l 处减一。于是乎问题变成了连边 (l,r+1) 求生成树个数

由于 mn+300 那么度数不小于 3 的点数量非常有限。将一度点用拓扑排序删去后找到二度点联通块,该联通块不能扩展的原因必然是出现了三度点边界(单独成联通块的情况更好处理就是了)

使用 dfs 找到边界,两端时同一个点那么直接给答案附加点数 +1 的系数,否则在两个端点中间连一条广义边 (a,b) 表示使用这条边将这两个端点联通的方案是 a 而不使用这条边将这两个点联通的方案数是 b,根据实际含义可以得到初值为 (1,联通块边数)

可以用 std::map 记录广义边并合并,在原图中连接三度点的边也要作为广义边存在。

剩下工作就是求行列式

Game

题目中保证了对于每列都有至多一张卡牌向上有解,将其翻转之后变成至多一张卡牌向下。那么此时对于列牌数 2 的列而言就得到了答案,而那些列上只有一张卡牌的就需要钦定该行是否翻转

先按照牌数从小到大遍历所有行来处理钦定带来的迭代,被钦定波及的列在接下来的过程中不作处理。

根据实际含义,剩下要处理的是 “如果钦定行翻转情况使得这张牌向上,那么剩下的行翻转情况都被确定,需要让牌向下”,是 2-sat 射程范围内的东西。

注意建图时有几种情况的讨论,同时需要对于每列前后缀优化

posted @   没学完四大礼包不改名  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示