CF做题记录--2023.10.11

C. RationalLee Problem - 1369C - Codeforces

有 n 个整数 1,2,⋯ ,a1​,a2​,⋯,an​,Lee 想要将它们放进 k 个有标号的盒子,使得标号为 i 的盒子中恰有 wi​ 个数。

定义一个盒子的价值为其中最大数与最小数之和,定义一种放法的总价值为所有盒子的价值之和。Lee 希望求出总价值的最大值。

思路

首先考虑wi=1的盒子:必然是放入最大值,ans*=max(a)*2

在考虑其他盒子:由于盒子中只有最大最小值有意义,那么“中间的”数一定尽量放小的,因此,放一个最大,其他放最小的。

考虑其他盒子的放入顺序,由于时间复杂度为O(n),可以两个顺序都写,再求最大值。

B. Codeforces Subsequences Problem - B - Codeforces

求其中至少有 k 个子序列为 codeforces 的字符串 S。两个子序列不同当且仅当某个位置的字符在一个序列中出现,而在另一个子序列中未出现。比如 codeforcesisawesome 包含四个 codeforces 子序列:

  • codeforcesisawesome

  • codeforcesisawesome

  • codeforcesisawesome

  • codeforcesisawesome

输出任意一个最短且符合条件的字符串 S 即可。

思路

一眼丁真,一定是形如codeforces的字符串符合题意。

很简单的排列组合,另a*b*c*d*e*f*g*h最大,字母分别代表codeforces字符串中各位字母的个数。

E. Arranging The Sheep Problem - E - Codeforces

一共有 t 组数据,每组数据第一行为 n ,为字符串长度,下一行为一个字符串(只有 ' . ' 和 ' * '字符),每次可以向右或者向左移动 ‘ * ’ 字符,求把所有的 ' * ' 字符连起来的最小移动次数

思路

数学题

先猜测是向中间的*移动

证明是 a+b>=a-a`+b-b`,只考虑有*的区间,在*不占位的情况下将*移动到同一个位置那么要移动的距离应该是一样的,在考虑占位之后,应该尽量让占位分布在两边

仅做理解用,不保真

 首先记录*的数量和位置,由于已经确定每个*应在的位置,可以直接计算

\sum abs(a[mid]-a[i])-abs(mid-i)

公式前半部分是距离mid的位置,后半是中间位的*和当前位的*之间应该预留几个*的位置

C. Rotation Matching Problem - C - Codeforces

  • 给定两个长度为 n 的 1∼n 的排列 ai​,bi​。

  • 你可以对任意一个排列进行若干次长度为 k 的 循环右移或左移;这里的循环移动指每个元素依次向左或右移动k 个,如果移出边界的元素再折回到排列的头或尾。

  • 你需要求出在移动过后最多有多少个对应的位置使得 ai​=bi​。

 思路

由于每个数字出现一次,可以直接计算两个数组间将各个数字对其需要的移动位数,再统计相同移动位数的数字。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值