这次又只切了A,B两个水题,C题就攻不下,赛后才发现题意读错了,然后又是做了很久,按自己的方法后来出现很多问题,无奈放弃, 看了看别人的思路。
C.
注意每个数必定与另外4个数相连, 我们可以从1开始构造,枚举1的左右两个数字,然后通过这三个已知的向右推出所有的数,每次推都能增加一个。
D.
题目只要找出一个长度 >= k的环,而且一定存在,我们只要从度最大的点开始搜,注意不要搜已经搜过的点, 当深度大于等于k时,我们只要判首位两点是否相连即可
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)的和。
然后枚举每个中心点,暴力处理出题目中式子的值取最大即可。