D. Permutation Restoration
bi = floor( i / ai )
floor的存在使 值域存在
两个知道的数,一个未知数
值域问题把未知数设到中间
i/ai = [ bi, bi+1) -> i/ai >= bi, i/ai < bi+1 -> i/bi >= ai, i/bi+1 < ai ->
i/bi+1 < ai <= i/bi
值域匹配 贪心: sort左边界,把每个左边界是idx的线段插入set,再从set里选最小的右边界。
首先这样做确保set里左边界<=idx,而idx后的element不可能覆盖idx,因为它们的start已经大于idx
第二,选右边界最小的,因为题目保证
总结:
floor的存在使 值域存在
值域问题把未知数设到中间
值域匹配 贪心: sort左边界,选最小的右边界
----------------------------------------------------------------------------------------------------------------------
E. Split Into Two Sets
二分图, bipartite graph, 对于每条边(u, v)可以分到两个不同的set
并且同一集合里没有边

一个数若多于3个domino有,则直接output NO
两个domino有value相同就给他们连边,因为不能在同一个set
之后做二分图匹配:
bfs: 初始node染色1,对于所有连接它的node: 如果没有被染过,染上opposite颜色,否则检查是否与father node 颜色不同
总结:
两个集合分 -> 二分图, element之间不能放一起 -> 建边
用bfs二分图检查
------------------------------------------------------------------------------------------------------------------------------
F. Equate Multisets
一个operation 乘2,一个operation 除2向下取整 -> 二进制 (往右移,往左移)
可以都先把0去掉,0为共有情况
建立2个priority_queue,每次拿A和B中最大的比较:
Bn 不等于 An:
Bn 大于 An,Bn不可能匹配A1....An,除二
Bn 小于 An,B1.....Bn 不可能匹配An,输出“NO”
匹配类型问题, ai 可以匹配给多个选项: 应用最小位思维,约定从最大或最小开始匹配
总结:
乘二和除二 -> 二进制左移和右移
匹配类型问题
-----------------------------------------------------------------------------------------------------------------------