纯纯的思维

简单

C - Magical Rearrangement

传送门
题意:给你 0 ~ 9 每个数字的数量,让你构造一个数字,数字必须符合以下规则:
1、所有数字必须被用上
2、不能有前导零
3、相邻数字不能相同
问构造的最小数字,无法构造输出 -1
做法:设每个数字的数量输入到 a 数组里,数量总和为 n,k 为数量最多的数字,mx 为他的数量。
首先思考 -1 的情况,n == 0 或者 a[0] > n / 2 或者 mx > (n + 1) / 2
除了 -1 外还有一种特殊情况,n == a[0] == 1,输出 0
其他情况一定可以构造出来,从贪心的角度看一定是输出小的,再输出大的,但有些情况只能先输出大的,比如 a[0] = 4, a[1] = 4, a[2] = 3,答案是 10101020212,第 4 对10 并没有直接输出,而是和 2 组合后输出。
所以问题就变成了什么时候该贪心,什么时候该考虑
可以看出,当 mx > n / 2 时,必须输出 k,除此之外,就按照贪心来输出,所以每输出一次就更新 k 和 mx 的值,这样一边更新一边输出下去一定是最优解。
为了方便起见,最好先输出一下第一个数,当 n 是奇数且 mx == (n + 1) / 2 时,输出 k,其他情况直接输出不是 0 最小的即可

E - Sequence in the Pocket

传送门
题意:给 n 个数,每次操作可以把一个数移到第一位,问把数组变成非递减需要最少多少次
做法:整了几个样例,可以发现每个点最多移动一次,具体怎么证明不会,但是每个点只移动一次既可以使序列不递减也肯定是最小操作。那么现在问题是该移动哪些点?对序列求一个前缀max数组,如果当前数比前缀max小,说明这个数必须移动,标记所有必须移动的点,从这些点中找到一个最大值,然后其他所有比这个最大值小(严格小)且没有被标记的数一定需要移动,所以答案 = 已标记的点 + 比最大值严格小的点

E - Exits in Excess

传送门
题意:给定 n 个点 m 条边的有向图,要求删除部分边使得图没有环,删除的边数 <= m / 2即可,输出任意一种方案
做法:只要求删除的边数 <= m / 2,没有要求必须删除最小边数。
对于有向图来说,如果输入的边都满足 u > v,那么这张图一定没有环,u < v 同理没有环。
所以将输入的图分成两个图,一个 u > v,一个 u < v。然后挑删边少的输出即可。
很简单就可以发现删掉的边数一定 <= m / 2

中等

C - Crossed out letter

传送门
题意:给定两个长度相等的字符串 a 和 b,要求构造一个字符串,使构造出的字符串既可以删除任意字符得到 a,也可以删除任意字符得到 b,若。
做法:构造出的字符串的长度 = n + 1,比 a 多一个字符,也比 b 多一个字符,做法是双指针,如果当前无法对应,i + 1 或 j + 1,i 和 j 错开一下再继续比较,且 i 和 j 的差绝不能超过 1,具体该怎么操作看下面解释
为了方便理解给出两个样例:

aca cae
答案: acae
ace cac
答案:cace

第一个样例:第一位不匹配,选择的方案是 i + 1 和 j 匹配,如果 i 和 j + 1匹配,将无法得到答案
第二个样例:第一位不匹配,选择的方案是 i 和 j + 1 匹配,如果 i + 1 和 j 匹配,无法得到答案
可以看出,两个错开的方式必须都要去尝试,否则就会漏掉一种正确答案,所以用搜索的想法去思考
如果把 i + 1 和 j 匹配与 i 和 j + 1 匹配当成两种可能,那么可以得到一棵奇怪的二叉树,但是 i 和 j 的差不超过 1,所以这棵二叉树一定是根节点有两个儿子,其他大多数节点都只有一个儿子(少数有两个儿子,这种节点和根节点所处的状态一致)。
所以这棵二叉树应该长下图这样
在这里插入图片描述
将这棵的点分为三列,左列代表 i + 1 和 j 匹配,中间列代表 i 和 j 匹配,右边列代表 i 和 j + 1 匹配
可以看出这棵树的叶子最多就两个,也就是答案最多两个,那么找出这个字符串,然后暴力匹配看是否是答案,若两个都不是就 impossible

L - Little Difference

传送门
题意:给定一个数字 n (<=1e18),将 n 分解成若干个数字的乘积,且这些数字任意两个从差值不超过 1,输出所有方案,若方案为无穷则输出 -1。
做法:题意就是将 n 分解成 xp 或者 xp*(x+1)q
首先考虑无穷的情况,x = 1 方案无穷,所以 n 为 2的幂时方案无穷,输出 -1。
xp:p <= 2 时,可以直接O(1)求出,p >= 3 时,x 的范围是 [2, 1e6],这个范围可以直接枚举。这样这种类型的所有可能都已经找出。
xp*(x+1)q:p 和 q 都不能为 0,否则就是上面的类型,若 p = q = 1,那么 x 的范围是 [1, 1e9],可用数学公式推出,若 p + q >= 3,x 的范围是 [2, 1e6],枚举即可。

较难

Find the Maximum

传送门
题意:题意,给定一个 n 个点 n - 1 的无向图,每个点都有自己的权值 b[i],保证全联通,让你找一条长度 >= 1 的链,使链上节点的平均节点最大,输出平均值的平方 / 4。(n <= 1e5 , -1e5 <= b[i] <= 1e5)
做法:对于一条链,链的长度每 + 1,若想要新的链的平均值 >= 原链,加入的节点的权值都必须越来越大,所以链的权值是递增的,但是若把链的另一端当作起点,那么链的权值是递减的,链的均值会越来越小,所以为了最优结果只能选择两个点,即本身和相连点权的最大值。
但是两个点只是答案的一种,三个点也是答案的一种,例如:100 - 0 - 100,这个样例中三个全选是最优的,那么 4 个点会是答案的一种吗?枚举样例猜测显然不是最优的,可以用公式小推一下:
设链上 4 个点的权值是 a, b, c, d
设 x = (a + b) / 2 , y = (c + d) / 2 , z = (a + b + c + d) / 4
若 z >= x,得 c + d >= a + b,得 y >= z
若 z >= y,得 a + b >= c + d,得 x >= z
所以,要么 x == z && y == z 要么 x 和 y 必有一个大于 z 的
同理,5 个点可以切成 2 和 3,6 个点,7个点…都可以分成一堆 2 和 3,最大的就是这些 2 和 3 中的一个,所以答案就是枚举每个点,找相连点中最大和次大的求 2 个点和 3 个点的值,取 max 即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值