好题精选
2020.10.14
CF662C Binary Table
可以拿 \(FWT\) 做,但是不会。
观察发现 \(n\leq 20\) ,考虑状压。
设 \(dp_{i,j}\) 表示经过 \(i\) 次单点修改可以达到状态 \(j\) 的列的个数,可得状态转移方程:
则 \(ans=\min\limits_{j=0}^{2^n-1}\sum\limits_{i=0}^ndp_{i,j}\times \min(i,n-i)\) ,其中 \(\min(i,n-i)\) 代表可以通过 \(i\) 次修改得到 \(j\) ,也可以通过 \(n-i\) 次修改。
2020.10.15
UVA1521 GCD Guessing Game
有一个结论是:在 \(p=1\) 的情况下,需要猜测的次数最多。
因为我们可以发现,每次询问后,如果返回 \(\gcd(x,p)=t(t\not =1)\) ,那么询问规模就从 \(n\) 下降到了 \(\lfloor \frac nt\rfloor\) 。
现在我们只需要求最少几次能把比 \(1\) 大的所有数都筛掉。
贪心即可,用质数来筛是最优的。把几个质数一块乘,得到最小次数。
P2216 [HAOI2007]理想的正方形
二维ST表裸题
P2219 [HAOI2007]修筑绿化带
单调队列优化DP。
先对每一行进行DP,然后对每一列进行DP。
P2900 [USACO08MAR]Land Acquisition G
大题解。
CF1327F AND Segments
大题解。
P3174 [HAOI2009]毛毛虫
找树上直径。
P2943 [USACO09MAR]Cleaning Up G
大题解。
P2746 [USACO5.3]校园网Network of Schools
第一个就是缩点然后求入度为 \(0\) 的点,第二个是求入度为 \(0\) 和出度为 \(0\) 的点的个数的较大值
P2466 [SDOI2008]Sue的小球
大题解。
CF268D Wall Bars
大题解。
CF449A Jzzhu and Chocolate
大题解。
2020.10.16
CF148D Bag of mice
设 \(f_{i,j}\) 表示有 \(i\) 只白鼠, \(j\) 只黑鼠时先手赢的概率。
初始状态,有一只黑鼠时,先手抽到黑鼠输,所以必须抽到白鼠: \(f_{i,0}=1,f_{i,1}=\frac i{i+1}\)
转移方程:
- 先手抽到白鼠: \(f_{i,j}=\frac i{i+j}\)
- 先手抽到黑鼠,后手抽到白鼠: \(f_{i,j}=0\)
- 先手抽到黑鼠,后手抽到黑鼠,跑一只白鼠: \(f_{i,j}=\frac j{i+j}\times \frac {j-1}{i+j-1}\times \frac {i}{i+j-2}\times f_{i-1,j-2}\)
- 先手抽到黑鼠,后手抽到黑鼠,跑一只黑鼠: \(f_{i,j}=\frac j{i+j}\times \frac {j-1}{i+j-1}\times \frac {j-2}{i+j-2}\times f_{i,j-3}\)
那么总结一下就是: \(f_{i,j}=\frac i{i+j}+\frac j{i+j}\times \frac {j-1}{i+j-1}\times \frac {i}{i+j-2}\times f_{i-1,j-2}+\frac j{i+j}\times \frac {j-1}{i+j-1}\times \frac {j-2}{i+j-2}\times f_{i,j-3}\)
时间复杂度为 \(O(wb)\) ,其中 \(w,b\) 为白鼠和黑鼠数量
P3459 [POI2007]MEG-Megalopolis
树剖裸题。
CF1163F Indecisive Taxi Fee
大题解。
CF1070A Find a Number
大题解。
CF547C Mike and Foam
大题解。
CF1070E Getting Deals Done
显然能想到二分答案,然后 \(\operatorname{check}\) 的时候只需要模拟过程判断即可。
2020.10.17
CF140E New Year Garland
大题解。
P3615 如厕计划
想要完成必须没有空闲 所以要男的尽可能前 所以当有一个后缀男生人数比女生人数多两个时一定无法完成 所以就要让所有这样的后缀尽可能变小 让男生往前 因为要最小最大不满意值 又因为每挪动一个至少加1 我们贪心的直接放到最前(反正都加1了也不差这点了) 这样可以让所有后缀除了整个的后缀和从结尾连着的女生都会减1 我们把男生看成1 女生看成-1 这样可以方便的求出男生多多少 我们预处理出每种的最大后缀和男生多多少
容易得出 如果最大后缀都满足 那么其他后缀也一定满足 因为一种后缀不止一个 只要一种的总和大于1 那么所有拼起来的最大后缀就是(个数减1)**每个的总和 加上一个最大后缀 当然如果一个总和小于1 直接算最大后缀即可 当然这是相当于我们从后往前一直拼 算完当前一段后缀后 要把所有个数*单个总和相加 为拼下一个后缀做准备 当然可能最大后缀也可能小于0 所以取max即可
P3200 [HNOI2009]有趣的数列
大题解。
CF975D Ghosts
大题解。
2020.10.18
P3502 [POI2010]CHO-Hamsters
大题解。
2020.10.19
CF1421A XORwice
大题解。
CF1428B Belted Rooms
拉跨题。
CF1428A Box is Pull
拉跨。
CF1428C ABBB
拉。
P3943 星空
CF79D Password
和上面那个是双倍经验。
P3865 【模板】ST表
az。
CF1070F Debate
大题解。
2020.10.20
嘤嘤嘤,好几天没更新了
CF40E Number Table
大题解。
P3105 [USACO14OPEN]Fair Photography S
大题解。
P4318 完全平方数
选择二分答案来找到 \((1,n)\) 中有几个满足条件的数。
但是怎么 \(\operatorname{check}\) 呢?
瞎乩矲推式子可以得到: \(num_n=\sum\limits_{i=1}^{\lfloor\sqrt n\rfloor}μ(i)\lfloor\frac n{i^2}\rfloor\) ,然后就没了。
P3899 [湖南集训]谈笑风生
当 \(b\) 为 \(a\) 的父亲时显然,考虑怎么快速求出 \(b\) 为 \(a\) 的合法儿子情况。发现 \(b\) 只需满足 \(dep_b\in [dep_a+1,dep_a+k+1],dfn_b\in[dfn_a,dfn_a+siz_a-1]\) ,其中 \(dfn_a\) 是dfs序。
那么将 \(dep_i\) 看作 \(y\) 轴, \(dfn_i\) 看作 \(x\) 轴,二维数点即可。时间复杂度 \(O(n\log n)\)
P4570 [BJWC2011]元素
大题解。
CF1101G (Zero XOR Subset)-less
大题解。
CF45G Prime Problem
哥德巴赫猜想的垃圾好题。
P1608 路径统计
拿SPFA跑最短路即可,在每个节点记得及时更新路径数。
P1144 最短路计数
上面的双倍经验
CF156C Cipher
大题解。