UOJ Logo zdw1999的博客

博客

AYITOJ Easy Round #1 题解

2019-03-18 21:39:50 By zdw1999

比赛链接:

https://acm.ayit.edu.cn/contest/9

A: A+B+C Problem

语言题, 注意三个数相加会爆int, 别的没了

标算代码: 2155

B: 复读机

还是语言题, 每次读一个字符串并检查与上一个是否相等即可

标算代码: 2156

C: 括号序列

经典题, 用栈直接维护即可

对于一个左括号, 我们直接将其压入栈中

对于一个右括号, 我们直接查询栈顶的左括号是否与其匹配

是的话将其弹出, 否则显然序列已经不合法了

注意特判最后有剩余括号的情况

D: 滑雪

10分做法: 直接暴力模拟一步一步地走即可, 复杂度O(n^2)

30分做法: 考虑对10分做法的优化, 我们可以每次走一条边, 复杂度O(n)

80分做法1(假): 考虑到只有一组数据, 我们可以加一些魔法优化(ka chang), 然后复杂度变成O(n/x), 过了

80分做法2: 从外往里走好像很难看, 我们从里往外走试试

很容易就会发现轨迹总是一个矩形 + 一条线段

所以我们先求出终点位置, 然后求出(总步数-走的步数), 然后开个方求出轨迹的正方形部分边长, 然后特判掉线段部分就ok了

具体的话分类讨论可能麻烦一点, 复杂度O(1)

标算代码: 2158

80分做法3: 从外往里走当然也可以大致看做一个等差序列啦

所以我们直接二分环数然后微调位置也是可以的

不过zdw懒所以没有写

E: 数字游戏

20分做法: 首先要发现传递是单向的, 所以我们贪心地把每个多余的数变成最近的缺少的数即可

于是直接模拟就能拿到20了

120分做法: 考虑维护, 可以用堆维护多余/缺少的数然后单向扫描即可

但实际上这里可以不用堆, 直接用两个指针来模拟即可

标算代码: 2159

F: 最长公共前缀

十分经典的题目呢。。。解法非常多, 各种字符串处理工具都可以做

我这里用的是最菜最暴力的二分+哈希

二分公共前缀的长度然后直接比对哈希值就好了(捂脸)

标算代码: 2160

那么这场 Easy Round 各位玩的开心吗 )

欢迎在评论区留言吐槽或者讨论其他解法

评论

暂无评论

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。