csp-s模拟92
T1:
容易发现每个数是独立的
实际上是要求ax+by=c的解中|x|+|y|的最小值
大佬们都是分情况讨论直接算出最小值
而蒟蒻我不会算,所以就用了一个诡异的方法:
先简单的取模找到接近最小值的地方,容易发现|x|+|y|大概是个单谷的函数
所以可以暴力左右移动xy找到谷底
T2:
考虑按照a排序,设计fi表示考虑前i个数对且选了第i个数对的最大权值和
首先容易想到转移:fi=maxaj≤bi{fj}+wi
发现样例都过不了,考虑哪里少算了
考虑无法转移到i的一段中有哪些也可以加入序列
发现若点k满足ak≥bi&&bk≥ai
那么点k就可以随便排在i的后面,且不会影响序列的max{a}
那么问题就转换为:
一个序列,每个点都有两个值key,val,如何快速求一段区间中∑keyi≥Cvali
主席树即可
T3:
考试时想到二进制拆分跑多源最短路,但复杂度好像不太对
实际上只需要跑一遍dijkstra多源最短路,然后记录每个点的最短路是由哪个特殊点拓展的
最后枚举每条边用两端点的信息更新答案即可
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步