标签:操作 重复 复杂度 time mat log 问题 一个 text
上次 \(A\) 卷 \(155\),\(B\) 卷 \(360\) ;一个退役,一个进队。
所以说很不爽,来把 \(A\) 卷的题再看一遍。
上次只看了 \(10\) 分的暴力,认真了才发现答案是 \(2 \times \min \{ ice,fire \}\),随便弄个数据结构二分维护就可以搞到 \(\mathcal{O}(n \log^2 n)\) 的好成绩,这样 \(60\).
\(2 \times 10^6\) 的话,这个复杂度要达到 \(9 \times 10^8\),少爷机不一定 \(3s\) 能跑完吧。
那 \(60\) 分就行吧。
想来想去 \(40\) 还是上不去,那就怎么地了。
黑啊,心里慌。
题意看完就觉得迷迷糊糊地,算法想不起来,数据结构也套不上去。
上次部分分没细看,这次要认真。
直接去部分分吧!
首先 \(15 \%\) 的 \(n \leq 10 ,m \leq 4 ,1 \leq v_i \leq 5\) 瞎爆搜呗!
当然我们可以考虑的是 搜索,把 \([0,10]\) 的状态大力搜一遍,然后记忆化记录答案的优劣。这样时间复杂度应该是 \(10^{10} \times 4\) 的,但是人都知道不会跑满,稳了 \(15\) 分。
\(n \leq 50 , m \leq 2 ,1 \leq v_i \leq 10\) 就说明只有 \(2\) 个满足的要求,那样只要满足 最多 \(4\) 个数其中 \(x \space \text{xor} \space y \not = 0\) , \(u \space \text{xor} \space v \not = 0\) 即可,只需要修改 \(4\) 个数。
那不慌!大力枚举 \((10 \times 2)^4\) 可以过掉的。这样就有了 \(30\) 分。
下面考虑 \(n \leq 50 , m \leq 30 , 0 \leq v_i \leq 1\).
此时 若干个数异或 \(\not = 0\) 的条件就变成了若干个数中 \(1\) 的个数和 \(0\) 的个数差为奇数。这样我们可以考虑把两个条件的重复部分暴力修改,其余部分直接统计。这样可以有了 \(50\) 分。
\(A = B\) 说明只有一个合法条件,此时 \(v_i\) 值域较大,萎掉。
所以 \(50\) 分啦!
\(\text{Day1}\) 有了 \(150\),很不慌。
既然 \(30\) 分暴力不满足,那就来考虑状压。用 \(e\) 来记录两两传递次数。(开 \(\text{vector}\) 不慌啊)
只有 \(2^m\) 个状态,滚一个 \(f_S\) 来进行 \(\text{dp}\),对 \(x \in S\) 的 \(x\) 进行更新 \(f\).
粗略一算,哈,枚举是 \(\mathcal{O}(m)\) 的,转移又要一重,那么就是 \(\mathcal{O}(2^m m^2)\).
这东西只有 \(60\) 分,常数一点也卡不进去。
空间是 \(\mathcal{O}(2^m)\) 没事,时间不行了,那这么地吧,\(60\) 就走了吧。
\(\text{Day2}\) 全是紫题,拿到 \(210\) 仍然很慌。
直接搞一个数据结构,那么要支持的是:
\(\text{Trie}\) 可以解决第一个和第三个,但是全局 \(+1\) 显然 \(\text{Trie}\) 搞不了。
那么一个二进制 \(+1\) 实际上是把 它最低位的 \(0\) 变成 \(1\),该位以后所有的 \(1\) 变成 \(0\),怎么维护呢?首先 \(\text{Trie}\) 的树高是 \(\log\) 的,暴力也可以,常数小一点的话可以直接从低到高的交换。
这样 \(\mathcal{O}(n \log n)\) 就过了?
对,没错!我切紫题了?jk/ jk/
至少 \(310\) 稳住了!
反演好累啊,直接 \(30\) 暴力带走吧。
虽然口头 \(340\) 进了 \(E\) 队,但是很多暴力 / 正解需要调试的时间,考场真正能写出来还需要时间的磨练。不过加油!
今番良晤,豪兴不浅,他日江湖相逢,再当杯酒言欢。咱们就此别过。江湖路远,各位请一路珍重。
标签:操作 重复 复杂度 time mat log 问题 一个 text
原文地址:https://www.cnblogs.com/bifanwen/p/13194659.html