模拟测试20190918
作者:互联网
诶这次考得其实挺炸的诶
然而结果还行?
莫不是前几次考得太炸导致$ rp++? $
上来看$ T1 $成功理解错题意
想不到正确复杂度的做法所以只能打暴力
打了个$ n^{2} $的暴力然而他A了?
yyT2了1h然而无果
看T3,先打了个普通$ O(nlogn*2^{m}) $的暴力
然后又改了个01trie的$ O(nlogn*2^{m}) $暴力
然后改成了$ O(n^{2}m) $的背包
然后试图优化背包无果,$ 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^{2}m) $的
设所有两边点的szie为a[0]~a[m-1]
对于一个平方式,把他拆开来分别统计每一项的贡献
一个平方式$ (a_{0}+a_{1}+......+a[n])^{2} $拆开后分别有$ a^{2} $和$ 2a_{i}a_{j} $两种项
对于$ a^{2} $,他的答案就是$ a^{2}*2^{m-1} $
对于$ 2a_{i}a_{j} $,他的答案就是$ 2*a_{i}*a_{j}*2^{m-2} $,可以直接$ O(m^{2}) $暴力统计,或者求个$ \sum\limits_{i=0}^{m-1}a_{i} $可以$ O(m) $
总复杂度$ O(n*m) $
标签:cnt,暴力,01trie,2a,20190918,测试,id,模拟,前缀 来源: https://www.cnblogs.com/mikufun-hzoi-cpp/p/11548259.html