模拟测试20190918
Posted mikufun-hzoi-cpp
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模拟测试20190918相关的知识,希望对你有一定的参考价值。
诶这次考得其实挺炸的诶
然而结果还行?
莫不是前几次考得太炸导致$ rp++? $
上来看$ T1 $成功理解错题意
想不到正确复杂度的做法所以只能打暴力
打了个$ n^2 $的暴力然而他A了?
yyT2了1h然而无果
看T3,先打了个普通$ O(nlogn*2^m) $的暴力
然后又改了个01trie的$ O(nlogn*2^m) $暴力
然后改成了$ O(n^2m) $的背包
然后试图优化背包无果,$ 50pts $滚粗
总分$ 100+0+50=150pts ,rank6 $
继续努力啊
$ T1: Set $
好神啊
题里给了n个数,所以会有n+1个前缀和
而在$ mod n $意义下一共只有n个数
那么至少有两个前缀和是相等的
那这两个前缀和之间的数之和一定是n的倍数
$ T2:Read $
好神啊
要想每天读书的种类都不同 , 就要求每一种书的数目不超过其它书的数目 +1,
所以只要看是否有一种书超过了 (N+1)/2. 本题空间限制很小 ,
但是 N 有很大 , 所以不能用数组存下来 , 但是我们只要找到超过(N + 1) / 2 的书 ,
所以我们用两个变量 id, cnt, cnt 初始为 0.
每一个 A[i], 如果 cnt==0, 那么就令 id=A[i],
如果 id==A[i], 则 cnt++, 如果不等于 , cnt--.
最后只要再扫一遍求出 id 的出现次数即可
$ T3:Race $
对于所有A建出来$ 01trie $
那么观察每个数,他的答案就是他01trie上的那条链两边的点的size所能组成的所有值的平方
但是这样做是$ O(n^2m) $的
设所有两边点的szie为a[0]~a[m-1]
对于一个平方式,把他拆开来分别统计每一项的贡献
一个平方式$ (a_0+a_1+......+a[n])^2 $拆开后分别有$ a^2 $和$ 2a_ia_j $两种项
对于$ a^2 $,他的答案就是$ a^2*2^m-1 $
对于$ 2a_ia_j $,他的答案就是$ 2*a_i*a_j*2^m-2 $,可以直接$ O(m^2) $暴力统计,或者求个$ \sum\limits_i=0^m-1a_i $可以$ O(m) $
总复杂度$ O(n*m) $
以上是关于模拟测试20190918的主要内容,如果未能解决你的问题,请参考以下文章