题解:P15050 [UOI 2023 II Stage] Pixel snail

· · 题解

题目大意

有一个图像,它由许多个像素组成,而第 k 阶的图像是这样组成的:

  1. 绘制一个“边框”——沿着边长为 k 的正方形的周边单元格被涂色。
  2. 绘制一个单元格,其左上角与边框的右下角重合。我们称这个单元格为“桥接”。
  3. 所有在边框外部且距离边框一个单元格的单元格被涂色。与此同时,与桥接单元格相邻的单元格(除了其左下角与桥接单元格的右上角重合的那个单元格:该单元格仍会被涂色)不会被涂色。

问第 k 阶的图像需要多少个像素。

解法

那么我们就可以根据这个图像的三个部分来分别计算。

第一个部分

边框其实就是大正方形减去小正方形,也就是

k * k - (k - 2) * (k - 2)

第二个部分

其实就是 1

第三个部分

观察发现,第三个部分可以分为 4 个部分,它们分别是 k + 2, k + 2, k + 1, k,它的面积也就是这四个部分的总合。

最后只需要把这三个部分加起来即可。

但是注意,当 k = 1 时,需要特判,因为 1 - 2 = -1

代码

#include <bits/stdc++.h>
using namespace std;
int main(){
    int k;
    cin >> k;
    if ( k == 1 ){
        cout << 11; return 0;
    }
    cout << k * k - (k - 2) * (k - 2) + 1 + (k + 2) * 2 + k + 1 + k;
    return 0;
}