专栏文章
题解:P13964 [VKOSHP 2024] Colony of Bacteria
P13964题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mio0f089
- 此快照首次捕获于
- 2025/12/02 11:19 3 个月前
- 此快照最后确认于
- 2025/12/02 11:19 3 个月前
提供一个 的解法。
由于题目的增量与秒数的奇偶性有关,我们索性按奇偶分情况讨论。我们只需要求出从 到 所有奇数秒对于前一秒的增量之和 ,以及所有偶数秒对于前一秒的增量之和 ,最后将两者相加即为答案。
先来看 为奇数的情况:
第一列表示秒数 第二列表示这一秒对于上一秒的增量。
| 秒数 | 增量 |
|---|---|
| 1 | 1 |
| 3 | 12 |
| 5 | 24 |
| 7 | 36 |
不难发现,这一秒的增量就是 的结果。
我们要计算的是从 到 所有奇数秒对于前一秒的增量之和,也就是 。不难发现其实就是
我们利用等差数列求和公式很容易就能 算出。
我们称 为 。
再来看 为偶数的情况:
第一列表示秒数 第二列表示这一秒对于上一秒的增量。
| 秒数 | 增量 |
|---|---|
| 2 | 8 |
| 4 | 24 |
| 6 | 40 |
| 8 | 56 |
依旧发现增量是 。
我们要计算的是从 到 所有偶数数秒对于前一秒的增量之和,也就是 。不难发现其实就是
接下来只需要计算 和 的和即可。若 为偶数,那么额外计算一下 到 的 即可,反之同理。
下面是代码。
CPP#include <bits/stdc++.h>
using namespace std;
int main(){
long long k;
cin>>k;
if(k&1){
long long n=k/2;
long long sum_Odd=1+6*n*(n+1);
long long sum_Even=(k-1)*(k-1)*2;
cout<<sum_Odd+sum_Even;
}else{
long long sum_Even=k*k*2;
long long n=(k-1)/2;
long long sum_Odd=1+6*n*(n+1);
cout<<sum_Odd+sum_Even;
}
return 0;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...