中山集训 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)\) 个数。

然后 也就是说这个式子可以转化到

\[\sum^{\lfloor \sqrt n \rfloor}_{i=1} i(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\),但是你可以开后门。

posted @ 2024-07-31 20:56  wtcqwq  阅读(44)  评论(0)    收藏  举报