NEERC 16

挑几道有意思的讲一下

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]\)

考虑建图:
\(S\longrightarrow S'(flow:max,cost:0)\)
\(S'\longrightarrow i(i\in[1,k],flow:\infty ,cost:0)\)
\(i\longrightarrow i+1(flow:max-min,cost:0)\),若\(i+1>n\)\(i\)连向\(T\)
\(i\longrightarrow i+k(flow:1,cost:e_i-s_i)\),若\(i+k>n\)\(i\)连向\(T\)
然后求一遍最大费用流,\(ans=(\sum s_i)+maxcost\)

正确性:
最大流为\(max\),即能流满:全部沿\(i\longrightarrow i+k\)这种边流即可
考虑中间的过程,若流满,充要条件为\(i\longrightarrow i+1(i\ge k)\)这条边的流量假设从这条边跨过的边的流量(即\(i'\longrightarrow i+k\)这种边)之和为\(max\)
故跨过的边的流量最小为\(max-(max-min)=min\),最大为\(max\)
至此,意义很明显了,每条边\(i\longrightarrow i+1(i\ge k)\)是用来维护\([i-k+1,i]\)

E

令当前借书的人有\(x\)个,若\(x\)为负数,则意义为库存\(x\)本书
然后题意就变成\(+k/-k\),然后统计\(x\)为正之和
将每个时间的\(x\)排序,然后二分即可得到正的后缀

F

首先先算第\(i\)张牌作为某一次的首张牌的概率
\(1\)张牌:\(1\)
往后算第\(i\)张牌作为\(j\in[1,i)\)张牌翻过来的概率
\(2\)张牌:\(1\times \frac{1}{n}=\frac{1}{n}\)
\(3\)张牌:\(1\times \frac{1}{n}+\frac{1}{n}\times \frac{1}{n-1}=\frac{1}{n-1}\)
\(4\)张牌:\(1\times \frac{1}{n}+\frac{1}{n}\times \frac{1}{n-1}+\frac{1}{n-1}\times \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

考虑三张图左上角的雀斑
那三个雀斑一定有两个是在一点的,然后分别检查这几个情况就好了

posted @ 2020-06-13 14:39  Grice  阅读(151)  评论(0编辑  收藏  举报