Codeforces Round #542 (Div. 2) 简要题解
A:Be Positive
\(\text{Problem}\):有一个长度为 \(n\) 的序列 \(a\),找到一个非零整数 \(d\),使得对于所有 \(\frac{a_{i}}{d}\) (不一定是整数),有至少 \(\lceil\frac{n}{2}\rceil\) 个数是正数。如果没有满足条件的 \(d\),则输出 \(0\)。
\(\text{Solution}\):考虑 \(d\) 为负数时,原序列中正数与负数个数交换。故直接记录原序列中正数和负数个数即可。
\(\text{Code}\):http://codeforces.com/contest/1130/submission/88834218
B:Two Cakes
\(\text{Problem}\):有一个长度为 \(2n\) 的序列 \(a\),每个 \(1-n\) 的数在序列中恰好出现 \(2\) 次。现在有两个人在 \(1\) 这个位置,每个人都要按照 \(1-n\) 的顺序进行取数,且一个位置的数被取过后另一个人不能再取。从 \(i\) 位置走到 \(j\) 位置的代价为 \(abs(i-j)\)。问最小代价是多少。
\(\text{Solution}\):考虑两个人同时取掉 \(x\) 这个数。我们不妨设两人在取 \(1\) 这个数之前都在位置 \(1\) 取掉了 \(0\)。则我们设两个人在取完 \(x-1\) 这个数后所处的位置为 \(p,q\) 且 \(x\) 这个数出现在 \(i,j\) 这两个位置,则最优答案显然为 \(min\{abs(p-i)+abs(q-j),abs(p-j)+abs(q-i)\}\)。暴力做即可。
\(\text{Code}\):http://codeforces.com/contest/1130/submission/88834567
C:Connect
\(\text{Problem}\):有一个 \(n\times n\) 的 \(01\) 矩阵,再给出起点坐标和终点坐标(保证在 \(0\) 上)。你在 \((i,j)\) 可以移动到是 \(0\) 且不移出地图边界的 \((i+1,j),(i,j+1),(i-1,j),(i,j-1)\)。你还可以在两个 \(0\) 之间建一个代价为两点欧几里得距离平方的传送器。传送器最多只能建一个,问能从起点到终点的最小代价。
\(\text{Solution}\):考虑到 \(n\leq50\),直接暴力求出起点所在的联通块与终点所在的联通块,暴力枚举分别处于两个联通块中的点,求出最小值即可。
\(\text{Code}\):http://codeforces.com/contest/1130/submission/88835351
D1&&D2:Toy Train
\(\text{Problem}\):有一个长度为 \(n\) 的环和 \(m\) 个物品。对于第 \(i\) 个物品,一开始它在 \(a_{i}\) 这个位置,它应该被运到 \(b_{i}\) 这个位置,且满足 \(a_{i}\not=b_{i}\)。有一个人在环上顺时针走(即从 \(i\) 走到 \((i+1)\),或从 \(n\) 走到 \(1\)),在 \(i\) 位置它至多可以拿走 \(1\) 个物品,但是他可以放下任意多的物品。问对于人的每个初始位置 \(i\),他从 \(i\) 这个位置开始出发,最少用多少步可以把所有东西放到指定位置。
\(\text{Solution}\):\(n\leq5000\),则我们考虑对于每个 \(i\) 求出答案。考虑我们从一个位置 \(x\) 出发时,如果有 \(p\) 个物品在这个位置,那么我们无论怎么取都至少要先走 \((p-1)\) 圈。那么很显然,我们要使最后取的那个物品离 \(x\) 最近。考虑记 \(p_{i}\) 表示 \(i\) 位置上原来有的物品数,\(q_{i}\) 表示 \(i\) 位置上与 \(i\) 最近的物品要被搬运到的位置。则我们对于起始位置 \(i\),有答案如下:
\(\text{Code}\):http://codeforces.com/contest/1130/submission/88835643
E:Wrong Answer
\(\text{Problem}\):CF1130E
\(\text{Solution}\):考虑构造一个前 \(i\) 项全部为负,后 \(2000-i\) 项全部为正的序列。设前 \(i\) 项的和为 \(x\),后 \(2000-i\) 项的和为 \(y\),则有式子如下:
考虑如何使得这个式子非常好算。此时已经构成一个不定方程,我们可以枚举 \(i\),用扩展欧几里得解决这个问题。不过我们发现这个式子可以进一步简化,由于 \(x\) 和 \(i\) 没有关系,我们考虑直接使得 \(x=-1,i=1\),则得到 \(K=-2000+y\)。直接暴力赋值即可。
\(\text{Code}\):http://codeforces.com/contest/1130/submission/88837270
后记:以后博主由于时间原因,可能不再会写 \(\text{Problem}\) 的详细题意了,但是会尽量把 \(\text{Solution}\) 写清楚的。