挑几道有意思的讲一下
B
将?换成(0/1)插到trie里面,建两棵tire,一棵表示子树是否有被选的(内向),一棵表示祖先是否有被选的(外向)
D
这题很有意思啊
将两种操作定义为睡觉与工作
首先假设先全部选睡觉的,令其价值为(s_i),那么将睡觉的调整为工作,价值为(e_i-s_i)
令连续(k)小时至少睡(min_s),至少工作(min_w),那么等价于至多工作(k-min_s),则每(k)天工作的范围(in[min_w,k-min_s])
为方便表示,写成([min,max])
考虑建图:
(Slongrightarrow S'(flow:max,cost:0))
(S'longrightarrow i(iin[1,k],flow:infty ,cost:0))
(ilongrightarrow i+1(flow:max-min,cost:0)),若(i+1>n)则(i)连向(T)
(ilongrightarrow i+k(flow:1,cost:e_i-s_i)),若(i+k>n)则(i)连向(T)
然后求一遍最大费用流,(ans=(sum s_i)+maxcost)
正确性:
最大流为(max),即能流满:全部沿(ilongrightarrow i+k)这种边流即可
考虑中间的过程,若流满,充要条件为(ilongrightarrow i+1(ige k))这条边的流量假设从这条边跨过的边的流量(即(i'longrightarrow i+k)这种边)之和为(max)
故跨过的边的流量最小为(max-(max-min)=min),最大为(max)
至此,意义很明显了,每条边(ilongrightarrow i+1(ige k))是用来维护([i-k+1,i])的
E
令当前借书的人有(x)个,若(x)为负数,则意义为库存(x)本书
然后题意就变成(+k/-k),然后统计(x)为正之和
将每个时间的(x)排序,然后二分即可得到正的后缀
F
首先先算第(i)张牌作为某一次的首张牌的概率
第(1)张牌:(1)
往后算第(i)张牌作为(jin[1,i))张牌翻过来的概率
第(2)张牌:(1 imes frac{1}{n}=frac{1}{n})
第(3)张牌:(1 imes frac{1}{n}+frac{1}{n} imes frac{1}{n-1}=frac{1}{n-1})
第(4)张牌:(1 imes frac{1}{n}+frac{1}{n} imes frac{1}{n-1}+frac{1}{n-1} imes frac{1}{n-2}=frac{1}{n-2})
第(i)张牌:(frac{1}{n-i+1})
然后dp,令(f_{i,0/1})为第(i)张牌是否被翻转了,(f_{i})由(f_{i-1})推过来
K
考虑三张图左上角的雀斑
那三个雀斑一定有两个是在一点的,然后分别检查这几个情况就好了