中山集训 day 1 day 3 模拟赛补题
Round 1 A
模拟即可。
赛场上的写法我自认为写的挺好的。把所有的 in 替换成 out ans 可以得到的所有串预处理出来,然后和其他原来的串判一下相等即可。
Round 1 B
很容易写错的题目。需要意识到 \(dp_{\{\}}=x\),如果 \(x\) 的值更小的话,可以考虑将本来设为 dp 状态的四元组中的某一维用来 dp,然后将原来 dp 的目标函数和状态互换,这样可以降低复杂度。
\(dp_{m,h,p,g}\) 表示已经进行了 \(m\) 个回合,(除了产品外的)三个元素分别为 \(h,p,g\),产品最大值。
但是我们发现 \(|p| \le 10^4\),即 \(\sum |p| \le 10^5\),如果放在 dp 状态里会占用掉大量时空,而目标函数 \(|e| \le 10\),\(\sum |e| \le 100\),更适合设为状态。
所以令 \(dp_{m,h,g,e}\) 表示已经进行了 \(m\) 个回合,(除了 \(p\) 外的)三个元素分别为 \(h,g,e\),产品最大值(或报告无解)
然后这个东西需要用滚动数组滚动掉 \(m\) 一维,就做完了。
Round 1 C
考虑这个式子的意义。假设只有两个数的话且这两个数互素的话,也就是 \(ax+by=1\),这个东西显然是有解的。
因为其等价于 \(ax\bmod y=1\),\(a\) 是否有解。在 \(x,y\) 互质的情况下一定有解。
考虑 \(x,y\) 不互质怎么办,令 \(l=\gcd (x,y)\),则 \(\frac x l,\frac y l\) 互质。
也就演变成了上面那种状态,所以所有 \(l\) 的倍数就可以凑出来。
总结普适性,所有 \(\gcd a_i\) 的倍数项都是可以凑出来的。
所以也就是一个区间 gcd 问题。pushup 部分可以直接维护。
Round 1 D
原来的这些站点都无意义,你对于每个线路上的每个站点都建一个点。
然后对于 \((i,u_{i,j}),(i,u_{i,j+1})\),代价是距离。
然后 \((v,(i,u_{i,j+1}))\),代价是距离是 \(v\) 到 \(u_{i,j+1}\) 的距离。下车则是建立 \(((i,u_{i,j}),v)\),大家是 \(v\) 愉悦度的相反数。
然后跑 johnson。
Round 2 A
\(\sum^n_{i=1} \lfloor \sqrt i \rfloor\)
对于 \(i\),它作为 \(\lfloor \sqrt x \rfloor\) 的区间 \(x\) 满足 \(i^2\le x < (i+1)^2\),这里一共有 \((2i+1)\) 个数。
然后 也就是说这个式子可以转化到
用等差数列求和公式和平方和公式就可以了。
考虑个边界条件就可以了
Round 2 B
二分一下。也就是中位数之前的 \(\frac{q-1}2\) 个要求最小代价,后面的也要求最小代价,问题转化成前缀后缀前 \(k\) 大和问题。
然后你拿主席树维护这个东西就可以了。时间复杂度是大常数的 \(O(n\log^2n)\)。
但是我们的问询区间要么左端点是 \(1\),要么右端点是 \(n\),然后这个东西可以用权值线段树 权值树状数组之类的以更小的常熟解决。
也可以用几个 set 之间的容器关系更进一步到 \(O(n\log n)\)。
Round 2 D
考虑这个东西的答案随机情况下很小,所以我们每次从 \(L\) 开始扫,扫到 \(\max-\min\) 大于区间长度了就将区间长度并到 \(\max-\min\) 上,然后做二位数点。
hack 是 \(1 2 3 \cdots n\),但是你可以开后门。

浙公网安备 33010602011771号