专栏文章
题解:P13964 [VKOSHP 2024] Colony of Bacteria
P13964题解参与者 5已保存评论 5
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mio0gb9m
- 此快照首次捕获于
- 2025/12/02 11:20 3 个月前
- 此快照最后确认于
- 2025/12/02 11:20 3 个月前
题意
第一秒时网格中有一个细菌,随后在第偶数秒,每个细菌向八方扩张一格,在第奇数秒,每个细菌向四方(上下左右)扩张一格,问第 秒有多少个细菌。
思路
找规律的题,第一秒是 个,第二秒是 个。
对于奇数秒,通过观察题目下方的表格,我们可以发现:设当前为第 秒,观察表格能够注意到相对于上一秒存在几个仅横向纵向复制的细菌(如下图)。我们仅考虑单边,可以发现每个单边恰好复制了 个细菌。由于存在 个单边,所以横纵复制的细菌总数为 。
再来看四个角,可以发现第三秒时四个角落没有细菌,第五秒时每个角落间隔了一个细菌。以此类推,第 秒的每个角落会间隔 个细菌。由于存在 个角,所以角落总共会新增 个细菌。
所以对于奇数秒,总共会增加 个细菌。

对于偶数秒,可以发现:第四秒时,每个仅横向或纵向的单边相比于上一秒的单边要多复制了两个细菌(如下图),也就是说,假设当前为第 秒,那么每个单边将复制 个细菌。由于存在 个单边,所以横纵复制总数为 个。
再看四个角,可以发现第四秒时,单边的内部的每个角落多出了 个细菌,同样我们可以在该图中推出第六秒的细菌布局,可发现所有角落的 能够恰好将下图中剩余的空格填满,也就是每个角落会多出 个细菌。由此,可以推断出第 秒时,每个角落会多出 个细菌。由于存在 个角落,所以角落总共新增 个细菌。
所以对于偶数秒,总共会增加 个细菌。

从第一秒遍历到第 秒,每秒进行计算,即可求出第 秒的细菌数。
Code
CPP#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; // 结束 (。・ω・。)
}
相关推荐
评论
共 5 条评论,欢迎与作者交流。
正在加载评论...