T1
其实很简单,没有必要用题解方法。我们只需要先计算出每一个位置在吃多少次之后就吃不到了。(一开始就吃不到的可以先删掉)
之后按照这个次数从小到大枚举,维护当前在剩下的序列中的位置即可。
每一次删除一个点需要判断当前位置是否需要减1。用树状数组判断即可。
剩下的位置的序号可能这样的:
1 3 5 9 11
即如果当前在第4个位置(即9),那么删去5(不是第5个位置)的时候位置就要减一(变为当前在第3个位置)。
不给代码,因为很简单,可以自己写。
T2
部分分:
-
第一档 40:设\(f(state,i,j)\)表示当前经过关键点的状态为\(state\),当前在\(i\),走了\(j\)次的方案数。转移按照状压套路转移即可。
-
第二档 50:发现d很大。对于k=0的情况,可以直接用矩阵计算走了\(d-1\)次后\(\sum_i\sum_ja(i,j)\)的值即为答案。
-
第三档 50 发现可以把矩阵改为状态为\(state\)时在第\(i\)点到状态为\(state'\)时在\(j\)点的方案数,然而时间复杂度为\(O(n^32^{3k}\log d)\),仍然无法通过本题。
-
第四档 100 发现状压和矩阵简直无法兼容,放弃状压,考虑容斥。直接封掉某些点再用矩阵计算。
代码网上有。但是容斥推荐用\(for\)枚举,不要用\(dfs\),很慢
T3
贪心大师重出江湖!
转化题意发现我们就是要分配\((\sum n)+1\)次\(+3\)操作给\((\sum n)+1\)个数,每个数最多被分配到两个,然后让某个指定数的排名尽量靠前。
显然的贪心策略:
-
先给指定数\(+6\)。
-
再给指定数\(+6\)后仍然比指定数大的其它所有数全部加6,假设这种数有\(x\)个。当然如果已经加够了这么多次就可以停止直接输出答案为\(x\)。
-
给其它比指定数小的数加到刚好再多加一次就比指定数大的状态(假设指定数为now,即加到now或now-1或now-2),当然还是最多加6。这期间如果加够了答案也是\(x\)。
-
剩下的加法操作,每执行一次,当前数的排名就会加1,因此假设执行完这些操作后还有\(y\)次没有执行,答案即为\(x+y\)。
这不是很简单吗?。。。。
T4
树上差分。模拟即可。无语。
2021.10.10
T1
发现\(n\)很小。
直接把居民这一行和他上面一行和下面一行以及这些列拿出来,离散化后变成一个新的网格图,这个网格图的大小一定是300以内的,直接跑最短路即可。理论时间复杂度约为\(n^3\log n^2\),但是会带一个10左右的大常数,不过跑不满,可以通过本题。
T2
数位DP入坟题。这里仅给出一种可行方法,不保证为最优方法。
设\(f(i,j,k)\)为\(i\)位数,最高位为\(j\),花费为\(k\)的\(FC\)有多少个
那么我们有转移公式:
下一步需要求出从\(1\)到\(x\)有多少个花费为\(y\)的\(FC\),用\(\text{getsum}(x,y)\)表示。
这个求法很显然。从高位到低位枚举即可。如果当前位为\(i\)时后面可以任取那就直接用\(f\)得到,否则就递归求\(\text{getsum}(x-1,y-i*10^{x-1})\)。
于是我们可以通过前缀和相减得到\([L,R]\)中花费为\(y\)的\(FC\)有多少个了。
最后枚举每一个花费即可求得答案。
T3
简单的数学题。
显然,如果一次只能掰一块,每一次操作会让总块数+1,因此要变成\(L\times W\times H\)就需要\(L\times W\times H-1\)次操作。
然而用刀割就不是了。显然,如果正确分配每一块的位置,每一次操作都可以让所有巧克力都变为两块,即总块数乘2。但是大小已经为1的就不能再分了。显然,对半分可以让大小尽量地均匀。因此最后就需要\(\lceil \log L \rceil+\lceil \log W \rceil+\lceil \log H \rceil\)次操作。
T4
这个是货真价实的多项式。。。
10分:直接计算,暴力取模。
30分:不需要写高精,边读边取模,使用龟速乘防止爆\(\text{long long}\)。
30~60分:普通高精,利用秦九韶公式计算多项式,计算次数是\(n^2\)次。需要计算\(l\)个多项式。普通高精的乘法复杂度为\(O(m^2)\),故复杂度为\(O(n^2m^2l)\),大约是\(10^{10}\)。
60分:压位高精:把9位压成一位,使得\(m\)可以变为\(\frac{1}{10}\),所以计算次数大约是\(10^8\),可以通过60分数据点。
60~80:显然,我们需要把乘法优化,这个时候就要请出我们的
把高精计算看作两个多项式\(\huge{卷积}\),利用FFT即可。时间复杂度为\(O(n^2lm\log m)\)
然而好像还是只有60。所以我们还需要更高明的算法。