模拟测试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) $

posted @ 2019-09-19 11:47  mikufun♘  阅读(131)  评论(0编辑  收藏  举报