ABC217
ABC217
A#
签到
B#
签到
C#
签到
D#
有一根长度为的木棍,有以下两个操作:
在处断开
回答包含处的木棍的长度
解:
二分
E#
给定一个空序列,有以下三种操作:
在末尾添加一个字符
输出首字符并删除
将序列升序排序
解:
用维护序列,升序排序时将序列中的所有字符都加入小根堆
输出时优先输出小根堆内堆顶,堆为空时输出队首
F#
一列个人,有对友好关系,每次选择相邻的两个友好的人删掉,求删掉所有人的方案数
解:
一眼区间
但是计算方案数的区间需要特殊的统计方法保证不重不漏
要不重复就要利用当前枚举到区间的特征
枚举,表示最后一步是由配对而成
G#
将分配到个非空集合里,号模同余的人不能在一个集合里,有多少种分组方式?
解:
考虑没有限制时,答案为第二类斯特林数
第二类斯特林数的递推式
其中第一部分表示第个数字自成一组,不需要考虑限制
第二个部分表示第个数字加入到现有的组中,只要去掉不能加入的组
设为中模与同余的数的个数
H#
小人开始时在数轴上的原点,每个时刻可以选择向左移动一步或向右移动一步
有次操作,每次在时刻处出现出现一把向左或向右发射的水枪,对小人造成的伤害,如果在水枪背侧则不受伤害
求受到的最少伤害
解:
https://www.cnblogs.com/ak-dream/p/AK_DREAM127.html
这篇写得好
定义一个状态:表示时刻在处受到的最少伤害,表示时刻在处受到的伤害
有转移方程
然后我们需要敏锐地观察力和经验发现,对于固定的,构成了一个下凸函数
那么可以发现对于凸壳左半侧,
对于右半侧
等于将左半侧凸壳向右移动,右半侧凸壳向左移动
第二部分,以向左发射为例,对于小于的部分是一个斜率为的一次函数,对于大于的部分是贡献为的常函数
现在介绍维护凸壳,每次只会对凸壳某一部分的斜率改变一个单位,且相邻两部分之间斜率相差,因为只要维护凸壳的断点在哪里
将左侧和右侧分开维护,并手动统计斜率为的部分的答案
后面细节看上面博客
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】