2021CCPC黑龙江省赛题解ADFHIJKL
K. Keep Eating
题意
有n (1≤n≤2e5)n\ \ (1\leq n\leq 2\mathrm{e}5)n (1≤n≤2e5)块蛋糕,重量分别为a1,⋯ ,an (1≤ai≤1e6)a_1,\cdots,a_n\ \ (1\leq a_i\leq 1\mathrm{e}6)a1,⋯,an (1≤ai≤1e6).每次某人只能吃不超过当前蛋糕的重量的一半的重量,且他不吃重量小于k (2≤k≤1e6)k\ \ (2\leq k\leq 1\mathrm{e}6)k (2≤k≤1e6)的蛋糕.此外,他可合并两块蛋糕,合并的蛋糕的重量等于原来两蛋糕的重量之和.求他最多能吃多少蛋糕.
思路
先将所有蛋糕拼在一起,设总重量为sumsumsum.
①若sum<ksum<ksum<k,则他不能吃到任何蛋糕.
②若sum≥ksum\geq ksum≥k,最优策略:先吃(sum−k)(sum-k)(sum−k)的重量,再吃剩下的kkk的重量中的⌊k2⌋\left\lfloor\dfrac{k}{2}\right\rfloor⌊2k⌋.
不能吃到的重量为⌈k2⌉\left\lceil\dfrac{k}{2}\right\rceil⌈2k⌉,故他能吃到的重量为sum−⌈k2⌉sum-\left\lceil\dfrac{k}{2}\right\rceilsum−⌈2k⌉.
代码 -> 2021CCPC黑龙江省赛-K(思维)
void solve() {
int n, k; cin >> n >> k;
ll sum = 0;
while (n--) {
int a; cin >> a;
sum += a;
}
cout << (sum >= k ? sum - (k + 1) / 2 : 0);
}
int main() {
solve();
}
J. JOJO’s Factory
题意
有A型机器和B型机器各n (5≤n≤5e5)n\ \ (5\leq n\leq 5\mathrm{e}5)n (5≤n≤5e5)台,每台A型机器必须与有且只有一台B型机器一起工作,每台B型机器必须与有且只有一台A型机器一起工作.现有m (0≤m≤2n−3)m\ \ (0\leq m\leq 2n-3)m (0≤m≤2n−3)个数对(i,j) (1≤i,j≤n)(i,j)\ \ (1\leq i,j\leq n)(i,j) (1≤i,j≤n),表示第iii个A型机器与第jjj个B型机器不能一起工作.问最多有多少对机器同时工作.
思路
只考虑A型机器,设nnn台B型机器都无限制,对此求得答案anslanslansl.同理只考虑B型机器,求得答案ansransransr.最终答案ans=min{ ansl,ansr}ans=\min\{ansl,ansr\}ans=min{ ansl,ansr}.
只考虑A型机器,设nnn台B型机器都无限制.一台A型机器能与B型机器工作的充要条件是:该A型机器的出度<n<n<n.
[证] (必) 若该A型机器的出度≥n\geq n≥n,显然它无法与任一B型机器工作.
(充) 只需证明A型机器的出度<n<n<n时能构造出一组解.
考虑最坏的情况,A1A_1A1向B1,⋯ ,Bn−1B_1,\cdots,B_{n-1}B1,⋯,Bn−1连边,则A1A_1A1要工作只能与BnB_nBn.
再让A2,⋯ ,AnA_2,\cdots,A_nA2,⋯,An向BnB_nBn连边将BnB_nBn占据,此时A1A_1A1无法工作,且当前共连了(2n−2)(2n-2)(2n−2)条边.
而边数≤2n−3\leq 2n-3≤2n−3,故必能构造出一组解.
代码 -> 2021CCPC黑龙江省赛-J(思维)
const int MAXN = 1e6 + 5;
int n, m; // 节点数、边数
int outl[MAXN], outr[MAXN]; // 左右节点的出度
void solve() {
cin >> n >> m;
int ansl = n, ansr = n;
while (m--) {
int i, j; cin >> i >> j;
outl[i]++, outr[j]++;
if (outl[i] >= n) ansl--;
if (outr[j] >= n) ansr--;
}
cout << min(ansl, ansr);
}
int main() {
solve();
}
D. Doin’ Time
题意
有一长度为n (1≤n≤300)n\ \ (1\leq n\leq 300)n (1≤n≤300)的序列a1,⋯ ,an (1≤ai≤1e6)a_1,\cdots,a_n\ \ (1\leq a_i\leq 1\mathrm{e}6)a1,⋯,an (1≤ai≤1e6),每次操作可选一个下标xxx,合并axa_xax和ax+1a_{x+1}ax+1为ax⋅ax+1 mod 1000003a_x\cdot a_{x+1}\ \mathrm{mod}\ 1000003ax⋅ax+1 mod 1000003,并得到(ax−ax+1)2(a_x-a_{x+1})^2(ax−

本文详细解析了2021年CCPC黑龙江省赛的多项算法题目,涉及区间DP、线性筛、并查集路径压缩、贪心等算法。题目包括蛋糕分块、工厂工作分配、序列维护、关卡挑战等,每道题均给出解题思路和代码实现,展示了在实际竞赛中如何运用数据结构和算法优化解题效率。
最低0.47元/天 解锁文章
1781





