THUSC2017题解

THUSC2017题解

题目都是在LOJ上交的。

chocolate

LOJ#2977巧克力

这题看着就让人想起了百度之星复赛的\(T5\),就是这题
因为种类的个数很多,所以把每个种类随意\(rand\)一个\([1,k]\)的权值做一个映射,这样子随机若干次的正确率就会很高。
接下来考虑如何计算要求的东西,这个东西很显然就是要求解一个中位数最小的斯坦纳树。
中位数显然直接二分处理掉,转为求解在用的块数最小的前提下的最小的大于中位数的值的个数。
斯坦纳树求解即可。
讲个卡常小细节,上面这个东西我们转移的时候显然是可以构建一个二元组转移,优先级较高的是块的个数,较低的是小于二分值的个数,这个东西哈希一下,给他们定义一个权值,如果小于二分值则给一个\(1001\),否则给个\(1000\),这样子也可以做到二元组的效果。
代码就戳提交记录吧,提交记录

dls

LOJ#2978杜老师

考虑一个很暴力的想法,如果我们知道每个数的每个质因子的出现情况的奇偶性,把它压成一个二进制数,那么问题就转为了给你若干个二进制数,你要从中选出若干个数使得他们的异或和为\(0\),求解方案数。
那么构建线性基之后答案显然是\(2^{R-L+1-tot}\),其中\(tot\)是线性基中的元素个数。
问题在于怎么构建这个线性基,然后计算其中元素的个数。
如果\(R-L\)足够大的时候,我们就认为只要在\([L,R]\)之间出现过的质数就会被加入到线性基中。
否则\(R-L\)很小,我们把所有质因子全部找出来,然后暴力\(bitset\)构建线性基计算。
这个值大概取到\(6000\)左右就可以保证正确性了。
提交记录戳这里

seat

LOJ#2979换桌

这题很明显就是一个费用流的模型。
但是如果直接爆力两两之间连边也是不可取的。
发现每个人可以坐的桌子是一段连续区间,
同时到每个座位的贡献也不同,那么把\(m\)个位置拆开,即现在有了\(m\)\([1,n]\)的区间。
当前点可以向这些区间连边,那么就改为线段树优化连边,特定位置转到某个位置的贡献很好算,但是移动桌子的贡献就不好算了。
其实也不麻烦,假设当前这个人所在的桌子在他目标桌子的左边。
那么对于线段树的每个节点,如果要向右儿子走,必定会跨过所有左儿子,所以加上两倍左儿子大小的贡献。
反过来,如果在目标桌子的右侧的话,就是向左儿子走的时候产生贡献。
那么就再把每棵线段树拆成两棵,分别对应左儿子产生贡献以及右儿子产生贡献。
这样子一共维护\(2m\)棵线段树进行优化连边就好了。
注意一下,每次点向区间连边的时候,不需要对\(2m\)棵每棵都连边,只需要向它自己所在位置的那棵线段树连边就行了,最后再把同一个桌子上的相邻位置之间连费用为\(1\)的边就好了。
看到权值这么小,边又这么多,\(SPFA\)费用流肯定跑不动啊,所以就用\(zkw\)费用流吧。
然而写完之后又\(TLE\),然后意识到自己原来学的一直都是一个假的\(zkw\)费用流。
改改就过了QwQ。
提交记录戳这里

magic

LOJ#2980大魔法师

说个小秘密,这题曾经被毒瘤\(wfj\_2048\)出到了\(NOIP2017\)模拟赛中。那个时候菜得不行的我连线段树都写不好还写这种题。。。。
不过现在看海星吧。
三个三元组之间互相关联,所以可以把操作都写成一个\(3*3\)的矩阵的形式,那么三个值就是一个\(1*3\)的行向量。然后线段树直接区间维护一下就好啦。
然而有些操作和区间长度相关,所以再加一维维护区间长度就好啦。
然而这题有点卡常,稍微注意一下常数上的优化。
提交记录戳这里

farben

LOJ#2981如果奇迹有颜色

看到本质不同的方案数肯定是\(Burnside\)引理了。
那么要求的就是对于每一种置换的不动点数量。
显然对于每种旋转\(d\)个元素的置换而言,其循环节大小为\(gcd(n,d)\)
然后可以矩乘计算循环节长度为\(i\)时的方案数\(f[i]\)
那么答案就是\(\frac{1}{n}\sum_{d|n}\varphi(\frac{n}{d})f[d]\)
约数个数很少,甚至可以暴力,所以问题在于怎么求解\(f\)数组。
显然直接求是没办法了,所以提前打好表预处理出前面若干项,然后直接\(BM\)解递推式,再用线性齐次常系数递推那套理论就可以快速计算\(f\)的值了。
提交记录戳这里

tangent

LOJ#2982宇宙广播

题答题,先咕了。

猜你喜欢

转载自www.cnblogs.com/cjyyb/p/10290109.html