【3.30】

本文解析了牛客周赛的两道编程题目,涉及回文判断的存在性问题和最大最小博弈搜索策略,以及AtCoder比赛中的字符串处理和二维区间查询技巧。通过实例和代码链接提供了解题思路。
摘要由CSDN通过智能技术生成

牛客周赛 Round 38

F 小苯的回文询问

这道题是判断存在性。判断可以找是否存在实例,或者不存在实例。

本题是判断不存在实例(正难则反)。

牛客周赛 Round 37

D 迷途之家的大贤者

知识点:最大最小博弈搜索

两个人对一个对象 x x x 进行操作,并定义一个权值函数 f ( x ) f(x) f(x) 。假设先手想让 f ( x ) f(x) f(x) 最大,后手想让 f ( x ) f(x) f(x) 最小。那么他们会怎么操作?

自树(图)的底向上思考,对每个节点定义 low ( u ) = min ⁡ { low ( v ) } , high ( u ) = max ⁡ { high ( v ) } \text{low}(u)=\min\{\text{low}(v)\}, \text{high}(u) = \max\{\text{high}(v)\} low(u)=min{low(v)},high(u)=max{high(v)} 。在先手操作的那一层,先手会选择后继节点中 f ( x ) f(x) f(x) 最大的那个方向移动,后手则相反。那么操作过程就是 low → high → low ⋯ \text{low} \rightarrow \text{high} \rightarrow \text{low} \cdots lowhighlow 。 那么最终答案为 a n s = high ( r o o t ) ans=\text{high}(root) ans=high(root)

最大最小博弈搜索代码:https://ac.nowcoder.com/acm/contest/view-submission?submissionId=68498422

O ( 1 ) O(1) O(1) 正解证明见:https://blog.nowcoder.net/n/b5cbb112c2c84fa59abc3067ea1778d8

AtCoder Beginner Contest 346

F - SSttrriinngg in StringString

这三行代码最重要,要仔细思考:

	sum += cnt / id[c].size();
	cnt %= id[c].size();
	p = id[c][cnt];

AC代码:https://atcoder.jp/contests/abc346/submissions/51751785

G - Alone

这题比较巧妙的思路是把所有的区间 ( L , R ) , 1 ≤ L ≤ R ≤ n (L,R),1\leq L\leq R\leq n (L,R),1LRn 作为二维点映射到了二维坐标系上。对于一个区间 ( L , R ) (L,R) (L,R) ,需要判断是否存在数字使得其在区间内。存在性可以作并集,映射到矩阵的话就是扫描线求矩阵并集的大小。

需要注意的是,通常的扫描线的坐标是坐标系上的坐标,而非该题中的网格坐标。需要将矩阵的网格坐标 ( x L , y L ) , ( x R , y R ) (xL, yL),(xR, yR) (xL,yL),(xR,yR) 映射为 ( x L , y L ) , ( x R + 1 , y R + 1 ) (xL, yL),(xR+1, yR+1) (xL,yL),(xR+1,yR+1) 即可。

AC代码:https://atcoder.jp/contests/abc346/submissions/51752235

  • 14
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值