AT 经典90题(001-030)
1.Yokan Party
不难考虑到二分答案,check 函数只需使用贪心,如果当前段能选就选即可,最后判断段数是不是大于等于
2.Encyclopedia of Parentheses
考虑暴力枚举每一位,然后线性判断括号串是否合法,把合法的括号串排个序输出即可。
判断方法:初始 sum 为
3.Longest Circular Road
不难发现一棵树加一条边会且仅会产生一个环,考虑这个环一定基于一条极长的链,而最长的链就是树的直径。所以这题求的就是树的直径长度加上
4.Cross Sum
考虑开两个桶分别记录某一行的和以及某一列的和,然后加到一块减去自己即可。
5.Restricted Digits
不难想到动态规划,但是朴素版本只能通过子任务
我们设
设
因为
具体地,当
最后答案就是
6.Smallest Subsequence
比较显然的贪心,考虑找出当前字典序最小的字母使得从这个字母出发能凑出
7.CP Classes
使用一个 set 维护所有数,同时加入极大值和极小值。设 pre 为当前查询数的前驱,nxt 为当前查询数的后继。答案即为
8.AtCounter
考虑一个简单的动态规划,
转移显然:
9.Three Point Angle
首先我们枚举一个点,把它看作角的顶点。接下来把这个点看成原点,找出所有其他点和
接下来枚举所有
10.Score Sum Queries
考虑开两个前缀和数组,分别存
11.Gravy Jobs
设
当
答案即为
12.Red Painting
考虑使用并查集维护两个位置是否连通即可。每次把一个点染红即为尝试与周围四个点相连。
13.Passing
考虑从
14.We Used to Sing a Song Together
考虑将
15.Don't be too close
考虑求答案为
16.Minimum Coins
由于答案不超过
17.Crossing Segments
考虑正难则反。考虑两条线段什么情况下无交:
-
其中一个点重合。
-
。 -
。
分别计算这三种情况然后减掉即可。
18.Crossing Segments
数学题,只需要通过转的角度算出来当前坐标然后用正切值算角度即可。
具体地,公式为:
-
。 -
。 -
。
然后简单计算一下就得到了最终直角三角形的两条直角边,直接用正切值算角度即可。
19.Pick Two
考虑动态规划。设
首先初始化所有
还有转移
20.Log Inequality
转化形式,比较
21.Come Back in One Piece
22.Cubic Cake
考虑立方体一定越大越好,考虑最大棱长一定是
23.Avoid War
首先朴素 dp 是无法通过的。我们考虑优化。不难发现如果我们从上到下,从左到右 dp,影响每个位置的地方只有
转移显然,假设这个位置放
但是这个东西仍然无法通过。注意到合法的状态不会太多,所以我们只用合法的状态进行转移即可,即把上面的
24.Select +/- One
设最少需要
25.Digit Product Equation
考虑搜索剪枝。先枚举答案的位数,然后枚举每一位,不难发现我们只关心乘积,也就是说数字顺序不重要,所以我们要求数字降序。然后判断当前乘积加上
26.Independent Set on a Tree
考虑把点按深度的奇偶性划分到两个集合内,哪个集合内的点数量不少于一半,就用哪个集合内的点的前
27.Sign Up Requests
使用一个 map 看这个字符串之前是否出现过即可。
28.Cluttered Paper
发现坐标范围非常小,只需要用二维差分修改最后用二维前缀和算答案即可。
29.Long Bricks
考虑使用线段树维护区间最大值,修改区间的值即可。
30.K Factors
考虑搜索剪枝,每次尝试乘上一个质数,不难发现最多乘
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?