santisify Site

Back

Codeforces Round 1002 (Div.2)Blur image

A. Milya and Two Arrays#

A. Milya and Two Arrays

题目描述#

给你两个长度为n的数组a和b,a,b中的每个元素都至少出现两次。你可以重新排列a,最后要使得ai+bi的不同种类大于等于3。

解题思路#

统计a和b的种类数cnt1,cnt2,因为长度为n且每个种类的数至少出现两次,所以a中每个数贡献的种类数就是出现次数,出现次数,min( 出现次数,cnt2),只要cnt1∗cnt2>=3就行。赛时没想的很清楚写的cnt1+cnt2>=4,其实一样。

参考代码#


B. Cost of the Array time limit per test1 second#

B. Cost of the Array time limit per test1 second

题目描述#

给你一个长度为n数组a和一个偶数k。你要把a分成k份。然后把所有偶数份按顺序拼到一起,得到b,求可以得到的bi!=i的最小的i。

解题思路#

我们让所有的k−1份都只占一个位置,第二份占多个位置,看能不能不让1开头,如果有我们可以把前面的1都给第一份,那么答案就是1。否则就全部都是1,那么全部给第二个份,那么答案就是2。
注意要特判n==k的情况

参考代码#


C. Customer Service#

C. Customer Service

题目描述#

给你n个长度为n的数组,你要给每一个数组截断一次,且所有数组截断的位置凑起来正好是一个排列。然后每个数组的值就是截断的后一部分的和。你要让所有数组和的mex最大。

解题思路#

记录每个数组的后缀和与后缀长度相等的位置,那么保留这一段位置可以得到一个数字。于是我们从小到大枚举mex只要有一个没有被操作过的数组可以贡献这个值,就可以继续操作,否则就是答案。然后考虑每个值由哪个数组贡献,应该让可以贡献的最大值最小的数组来贡献这个值。因为其他数组都可以贡献更大的值,应该留下来。

参考代码#


D. Graph and Graph#

D. Graph and Graph

题目描述#

给你两个由n个顶点的图,你在图一和图二各有一个起点,你每次要在这两个图上移动,假设从图一移动到了u, 图二移动到了v,移动代价是|u−v|。你要进行无限次操作,求操作的最小代价。

解题思路#

显然我们让两个图都到一个相同的点u,使得有一个v在图一和图二上都和u有边。那么可以在这两个点上反复横跳,代价是0。否则代价是正无穷。 那么可以考虑最短路,dist[i][j]表示图一在i,图二在j时的最小代价。最后枚举每个i,看有没有一个j使得在两个图上都有边,然后取最小值即可。

参考代码#

Codeforces Round 1002 (Div.2)
https://santisify.top/blog/old/cf2059
Author santisify
Published at February 7, 2025
Comment seems to stuck. Try to refresh?✨