2024 牛客多校 4
https://ac.nowcoder.com/acm/contest/81599
g min(x,y)
没写 min
WA 了一发。居然能过样例,应该会报 warning 但我从来不看。ctrl backspace 还是得看着
j 读完就会了但做的并不快,当时 k 还没读
k 一开始在一棵线段树上分别维护数字和符号,共用一个 mdf
,比较混乱,还有顺序问题。重构了一遍
改进一下前期跟榜策略:读题,没秒掉就扔出去,读到 ds 大胆做
D
观察:
- 如果要买,尽量早买
- 如果某回合产量
,之后的决策平凡,且容易 计算答案 - 最坏情况下大约调和级数回合后就能满足上一条。即只需要考虑前
回合
DP。设
刷表转移。枚举下一次要种的向日葵
细节比较多
J
设以当前位置为右端点,长
考虑转移到下一个位置:
0
:清空1
:令 集体 ,再增加一个?
:同1
,再令 集体
利用二项式定理,只需要维护
std 的叙述非常神秘。
K
线段树分别维护数字和符号。容易查询一个数字区间的数值。在符号位置维护该符号和后面数值构成的运算,想办法合并运算
查询时第一个到倒数第二个运算区间查询,第一个数值和最后一个运算单独处理
牺牲常数可以写得比较清新
// * mul + sum + lst
struct Info {
bool flg; // 是否含有 +
mint mul,sum,lst;
Info(){}
Info(bool flg,mint mul,mint sum,mint lst):flg(flg),mul(mul),sum(sum),lst(lst){}
friend Info operator + (const Info &x,const Info &y) {
if( !x.flg ) return {y.flg, x.mul*y.mul, y.sum, y.lst};
if( y.flg ) return {1, x.mul, x.sum+x.lst*y.mul+y.sum, y.lst};
else return {1, x.mul, x.sum, x.lst*y.mul};
}
} t[N*4];
std 没有分开维护数字和符号,把表达式分成一个数字、只有乘、有加三类,值得一看
L
除法是讨厌的,先改写成乘法:定义“等效距离”,初始为
考虑在以时间为下标的线段树上二分,问题是值域过大
key observation:减速的时间点
等效距离维护两个值:原始值与 1e9+1
取 1e9+7
的值
线段树维护三个值:等效距离乘了
代码很难写。等效距离是否
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具