Codeforces Round #161 (Div. 2)(完全)

本文介绍了Codeforces Round #161 (Div. 2)比赛中的C、D、E三道题目。对于C题,作者意识到错误在于每个数必须与另外4个数相连,通过从1开始构造并枚举解决。D题策略是从度最大的点开始深度优先搜索,判断是否存在长度>=k的环。E题中,作者分享了一种简化输入和处理矩形的方法,通过预处理和枚举中心点找到最大值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这次又只切了A,B两个水题,C题就攻不下,赛后才发现题意读错了,然后又是做了很久,按自己的方法后来出现很多问题,无奈放弃, 看了看别人的思路。

C. 

注意每个数必定与另外4个数相连, 我们可以从1开始构造,枚举1的左右两个数字,然后通过这三个已知的向右推出所有的数,每次推都能增加一个。

code


D. 

题目只要找出一个长度 >= k的环,而且一定存在,我们只要从度最大的点开始搜,注意不要搜已经搜过的点, 当深度大于等于k时,我们只要判首位两点是否相连即可

code

E

官方题解的方法太麻烦,我看见了某位大神犀利的做法:

将矩形n*m旋转45度输入, 如下图

 

 

 

4,m-3

 

 

3,m-2

 

 

2,m-1

 

4, m-1

1, m

 

3, m

 

 

2,m+1

 

3, m+1

 

 

3, m+2

 

 

 

 

4, m+3

 红色为第一行的输入(后面略), 蓝色为第二行的输入,后面依次类推。 可以写成,cin >> v[i+j-1][i-j+m]; 注意转变后行列长度分别变为n+m。

这样一来,对于确定的中心点(a,b),所有点(i,j)中,满足d = max(0,k - |a-i| - |b-j|)相等的点一定在同一行或同一列中,是一个正方形的四条边,正方形的变长为(2*d+1);

我们先预处理出在点(x,y)左上角以上(包括边界)所有a(x,y)的和。

然后枚举每个中心点,暴力处理出题目中式子的值取最大即可。

code


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值