生成樹
題目描述
有一種圖形叫做五角形圈。
一個五角形圈的中心有1個由n個頂點和n條邊組成的圈。在中心的這個n邊圈的每一條邊同時也是某一個五角形的一條邊,一共有n個不同的五角形。這些五角形只在五角形圈的中心的圈上有公共的頂點。如圖0所示是一個4-五角形圈。
現在給定一個n五角形圈,你的任務就是求出n五角形圈的不同生成樹的數目。還記得什麼是圖的生成樹嗎?一個圖的生成樹是保留原圖的所有頂點以及頂點的數目減去一這麼多條邊,從而生成的一棵樹。
注意:在給定的n五角形圈中所有頂點均視爲不同的頂點。
輸入格式
輸入包含多組測試數據。
第一行包含一個正整數T,表示測試數據數目。
每組測試數據包含一個整數n( 2<=N<=100),代表你需要求解的五角形圈中心的邊數。
輸出格式
對每一組測試數據,輸出一行包含一個整數x,表示n五角形圈的生成樹數目模2007之後的結果。
樣例數據
input
1
2
output
40
數據規模與約定
保證a,b≤10^ 9a,b≤10^ 9。
時間限制:1s
空間限制:256MB
一個五邊形被刪了兩條邊,那麼有一條一定在中心的那個n邊形上
所以首先選擇一個刪除兩條邊的五邊形,有n種可以選擇,然後每個五邊形刪掉一條邊,ans=4*n∗5(n−1)
因爲數據小,直接做就行了
#include <bits/stdc++.h>
using namespace std;
int n,T,ans;
int read(){
int x=0,f=1; char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
int main()
{
// freopen("data.in", "r",stdin);
// freopen("data.out", "w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int i=0;
for(ans=4*n;++i<=n-1;)
ans=ans*5%2007;
printf("%d\n",ans);
}
return 0;
}
很簡單吧~~~