atcoder绿题选做
ABC305:E https://atcoder.jp/contests/abc305/tasks/abc305_e
题意:给定一个无向图,给定k个守卫,每个守卫有h[i]的耐力值,如果是一个在图中是被保护的要满足和守卫的距离至少为h[i],让你升序打印所有被守卫的点
解题思路:可以从守卫出发,看守卫在可以走的情况下最远走到哪,最后统计被更新的点,核心做法是多源bfs和最短路的思想
ABC305:D https://atcoder.jp/contests/abc305/tasks/abc305_d
题意:高桥喜欢睡觉写日志,日志的长度为奇数且第奇数个元素代表他起床时刻,第偶数个元素代表他上床睡觉的时刻,现给定区间[l,r],询问在此区间内高桥的睡眠时间长为多少
解题思路:其实第一印象猜大概什么做法的话肯定是二分,因为要选择睡眠时间肯定是要找在a[i]内大于等于两个区间界限的时间点,,然后可能涉及到计算一段区间长度的问题,这里可以用前缀和来处理,然后就根据题意进行区间运算了
ABC306D:https://atcoder.jp/contests/abc306/tasks/abc306_d
题意:给定n个菜,这些菜有一定的营养值且可能有毒1,可能无毒0,初始时候人的是健康的,如果他是在健康的状态下吃有毒的菜他会进入不健康状态,吃无毒的菜继续维持健康状态
如果他在不健康的状态下吃无毒的菜他会进入健康状态,反之他就挂了。
对于一些菜,这个人可以选择吃也可跳过,到最后如果i!=N再来一轮,i==N他会活着离开。
问此人在或者离开的情况下能获得最大的营养值是多少
tip:如果此人第一次吃到是有毒的菜那这一次菜的营养值不计入在内
解题思路:很典型的01背包,考虑在当前菜有毒/无毒情况下健康/不健康的进食获取值
ABC297E:https://atcoder.jp/contests/abc297/tasks/abc297_e
题意:给定n个价值为a[i]的商品,要求你至少买一种且你被允许购买多个同类的商品,找到你可能支付的第k最低价格,在这里如果有多套价格相同的商品,价格只被计算一次
解题思路:可以考虑每次用当前集合中的最低价对其他元素进行累加同时删掉此元素,这样进行k次操作后取集合中最小的元素其实就是答案
ABC290D:https://atcoder.jp/contests/abc290/tasks/abc290_d
题意:给定下标从0开始的n个格子,对每一个格子你可以进行这样的操作:
1.将当前格子涂为0
2.令x=(A+D)%N,A是当前格子的下标
3.如果格子x被标记了,那就重复(x+1)%N
4.涂下标为x的格子
解题思路:当时只觉得是模拟,但发现其实没这么简单,正确做法是裴蜀定理,下面给出此题的证明过程
首先有结论:设g = gcd(A,B) A = ag,B = bg 。
a项式子 0B mod A,Bmod A, 2B mod A,......(a - 1)Bmod A。
特点是:
1.每项式子的值都是g的倍数。
2.且倍数为0~ a―1每一个数恰好出现一次。
证明:
1. B mod A = B — xA(x= B /A)= bg — xag = (b - xa)g。2.设有重复的倍数iBmod A =jBmod A(i!= j)。
iB-jB=(i-j)bg = yA为A的倍数(iB― jB) mod A=0模A余数相同,那么相减后再模A余数自然为0。(i一 j)bg = yag
因为a与b互质( a与b若还有大于1的公约数,那么gcd就不会是g 而是g * gcd(a,b))。所以(i一j)是a的倍数这显然与上式系数区间[0, a―1]相违背。
此题对于上述定理的应用
设g= gcd(N, D) N =ng,D = dg。
对于上述问题有跳跃的前n步为0 mod N, D mod N, 2D mod N,.... , (n - 1)D mod N。每一项都是不重复的g 的倍数,所以不会触发条件2。而第n+1步nD mod N = ndg = dN mod N =0。
开始有重复项第二轮开始,此时需要向前走一步(0,接下来又可以按(Dmod N)+ 1,(2D mod N)+ 1,....的顺序进行n轮跳跃。
每一轮n个直到所有格子都被遍历到。所以我们只需要确定我们在哪一轮,偏移量+轮数即可轮数:len= (K- 1)/n。
偏移量:add= (K- 1) mod n。ans = add * D。
最初容易想到特殊情况,当D为N的因子时,前N/D步肯定没有重复,接下来每一步都是上一轮同样倍数+1若为0,3,6,9 . .....下一轮即为1,4,7,10 . . ....
随后再引申到非因子的数应该也有一个循环节上进行考虑。
ABC287E:https://atcoder.jp/contests/abc287/tasks/abc287_e
题意:给定n个字符串找出他们各自与其他字符串所具有的最大LCP值
LCP是指两个字符串的长度都大于等于i且在1~i直接具有相同的字符相匹配
解题思路:这不妥妥Trie?
ABC284E:https://atcoder.jp/contests/abc284/tasks/abc284_e
题意:给定一个无向图找出它的简单路径的条数,然后输出min(ans,1e6)
解题思路:dfs回溯找路径比bfs更方便
__EOF__

本文链接:https://www.cnblogs.com/LQS-blog/p/17545771.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文来自博客园,作者:江上舟摇,转载请注明原文链接:https://www.cnblogs.com/LQS-blog/p/17545771.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?