专栏文章

题解:P12252 [蓝桥杯 2024 国 Java B] 七边形

P12252题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipjm5nh
此快照首次捕获于
2025/12/03 13:04
3 个月前
此快照最后确认于
2025/12/03 13:04
3 个月前
查看原文
水一发。

思路

很明显,这是一道递归题,那要怎么递归呢?很简单,先观察图形,可以发现,每一个图形都是一个大的七边形,套上上一个图形,我们把它拆分成几个部分:
我们先看红色部分,不难看出,第 ii 个图形的红色部分的边上共有 7i7i 个点,同时重复了 77 个点。
再看蓝色(画圈)部分,可以知道,它是上一个图形。
再看黄色部分,可以看出,它是红色和蓝色部分的重合部分,我们可以找一下规律:
  1. 第一个图形:00
  2. 第二个图形:11
  3. 第三个图形:33
  4. 第四个图形:55
可以发现,第 ii 个图形的黄色部分为 (i1)×21(i-1)\times2-1 个点。
全部加起来,结果算出来
设第 ii 个图形总点数(小球数)为 fif_i,则 fif_i 为:
红色部分加上蓝色部分减去黄色部分
也就等于:(7i7)+(fi1)((i1)×2+1)(7i-7)+(f_{i-1})-((i-1)\times2+1)
化简:7i7+fi12i+2+17i-7+f_{i-1}-2i+2+1
等于:5i4+fi15i-4+f_{i-1}
算完了,但是还有几个注意事项:
  1. 初始化 f0=1f_0=1
  2. C++古训:不开()见祖宗。
上代码:
CPP
#include<cstdio>
long long a[20240605];
int main(){
	a[1]=1;
	for(int i=2;i<=20240601;i++)a[i]=i*5ll+a[i-1]-4ll;
	printf("%lld\n",a[20240601]);//我是不会告诉你答案是1024204791742101的 
	return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...