【找规律】六边形 纪中集训

博客探讨了一道关于找规律的题目,涉及六边形的排列。作者在考场上通过观察发现每圈六边形数量成等差数列,并注意到相邻六边形的关系。虽然规律难以明确,但提出了转换思路的方法,从已有的六边形推导出相邻的六边形,并总结出关键结论。最后,讨论了将这些概念转化为代码实现的挑战。
摘要由CSDN通过智能技术生成



这题一眼看穿其找规律本质
然而如何找规律,这是一个问题
此生最恨结论题(找规律算其中一种吧)、构造题

不得不说此题是打表好题,找不到规律果断skip之后回来还是找不到规律,然后为了30%的部分分卑微地画了100个正六边形


考场上的思路:
首先,它每一圈的个数是有规律的:1、6、12、18······
然后,显然同一圈的 i-1 i i+1是相邻的
那么不同圈上的相邻的怎么算呢?
嗯,这是个问题。
大概画了几圈之后发现这个规律非常的隐晦 (其实我根本就没有找到)
这些正六边形有的对着两个,有的对着一个,完全不知道怎么搞


然而OI的有趣之处就在于此(怎么就开始哲学了)

所谓正难则反,既然找每一个六边形的相邻的已生成的六边形有哪些找不到,我们就想想如何通过已有的推哪些六边形是跟现在的相邻的。
我们就把视线转移到了一个个周围一圈6个的这样的图形:

由于我们的思路已经转移到了“我为人人”的境界,所以i-1以内的数我们就不用管了,因为他们自己会推过来

i+1由i拓展得到的 所以一定与i相邻
然后最难搞的就是其它的数

首先,通过观察,可以知道他们一定都是连续的(逆时针绕圈圈)

其次,i=1的情况明显可以打表,当1移动到2的时候,我们会发现,外面那一圈最大的7,在2的那个圈圈里面变成了最小的。
以此类推后面的圈圈,这是第二个重要的结论。
然后就是这些连续的数的个数,显然就是6(一圈的个数)-i-1以内与它相邻的个数-1(第i+1个)

然后就是代码的细节实现问题了:

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define MAXN 10005
#define INF 0x3f3f3f3f
#define LL long long
int cnt[MAXN],mx[MAXN],id[MAXN],tot[6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值