题解:P13964 [VKOSHP 2024] Colony of Bacteria
题意
第一秒时网格中有一个细菌,随后在第偶数秒,每个细菌向八方扩张一格,在第奇数秒,每个细菌向四方(上下左右)扩张一格,问第
思路
找规律的题,第一秒是
对于奇数秒,通过观察题目下方的表格,我们可以发现:设当前为第
再来看四个角,可以发现第三秒时四个角落没有细菌,第五秒时每个角落间隔了一个细菌。以此类推,第
所以对于奇数秒,总共会增加
对于偶数秒,可以发现:第四秒时,每个仅横向或纵向的单边相比于上一秒的单边要多复制了两个细菌(如下图),也就是说,假设当前为第
再看四个角,可以发现第四秒时,单边的内部的每个角落多出了
所以对于偶数秒,总共会增加
从第一秒遍历到第
Code
#include <iostream>
#include <cstdio>
using namespace std;
typedef long long ll;
ll k, ans = 0LL, add = 0LL;
int main()
{
scanf("%lld", &k);
for(ll i = 1;i <= k;i++){
// 两个特判
if(i == 1){
ans = 1LL;
add = 1LL;
continue;
}
if(i == 2){
ans = 9LL;
add = 8LL;
continue;
}
if(i & 1) add = (i + (i >> 1LL) - 1) << 2LL; // 奇数秒
else add = ((i << 1LL) - 2) << 2LL; // 偶数秒
ans = ans + add; // 累加
}
printf("%lld", ans); // 输出
return 0; // 结束 (。・ω・。)
}