题意简述
定义"五角形圈"为一个长度为的环,每一条边都画一个正五边形,形成的图形。给定,求长度为的环形成的"五角形圈"的生成树有多少种(每个点都是不一样的)?
(如下图是一个条边形成的"五角形圈")
(bzoj上盗的图)
数据
输入
第一行是一个,表示有组数据
接下来行,每行一个。
输出
行,第行是第次询问的答案。
样例
输入
1
2
输出
40
思路
看到这个题的第一反应:wdnmd中山还有市选???
emmm。。。说正事。这个题一看就是一个大组合题。。。应该是有一个公式的,是什么呢?来♂一起推♂公♂式♂。
由于我是个蒟蒻,我一开始想了一个不太正确的思路:我枚举中间那个环上用了多少个边。数着数着,我发现。。。越到后面越不好数,而且还要累加,万一一大。。。珂能就挂了。。。
所以我开始换了一种枚举方法:枚举四周的五边形的情况。现在,我来还原一下我当时的思路轨迹。先把4-五角形圈的那个图画在 桌子(我们学校桌子珂以用铅笔在上面写草稿,虽然破坏公物不好,但为了信息竞赛,不管了) 草稿纸上。
然后我们删掉一些边。由于每个五边形都组成一个环,所以考虑枚举五边形,去删边。从正上方那个开始,顺时针枚举五边形开始删边(如红色箭头所示)。蓝色表示删去的边。
删到第三个,如果我们不考虑最左边那个,删去的边已经形成一个树了。此时我们完成了删个的任务,由于个五边形每个都有条边(废话),所以每个都有种选择(条边中任选一个删除,即可让前个形成树)。到此就是种。
但是,对于最后一个,不是删个就珂以形成树的。似乎。。。要删两个。而且我们会发现,紫色所示的那条边还必须删除,因为剩下个五边形让中间的那个环的剩下个点联通,如果此时在多连一条边,就变成环了,不满足条件,所以紫色的一定要删。剩下还有种选择(蓝色表示的是其中一种)。如下图所示
然后我们会发现,还没考虑完。题目中说每个点都是不一样的,所以最后剩下的那个五边形是哪个都有珂能,并且都会生成不一样的树。所以还要乘。
这样一总和,答案就是。打个快速幂就过了。
代码:
#include<bits/stdc++.h>
using namespace std;
namespace Flandle_Scarlet{
#define mod 2007
int qpow(int a,int b,int m)//a^b%m
//快速幂
{
int r=1;
while(b)
{
if (b&1) r=r*a%m;
a=a*a%m,b>>=1;
}
return r;
}
void Main()
{
int T;scanf("%d\n",&T);
while(T--)
{
int n;
scanf("%d",&n);
printf("%d\n",4*n*qpow(5,n-1,mod)%mod);
//解释过了
}
}
}
int main()
{
Flandle_Scarlet::Main();
return 0;
}