标签:span 一个 line lap www cto -- ext div
代码两分钟...证明2小时(雾
这道题简单来说就是:要想很久但是代码一下子就能打完...
首先看数据范围猜算法系列--猜不出来...
接着看题...求生成树数目,转向百度,得到一个叫做matrix tree定理的东西...看完一脸懵啊...不会写...
算了既然点开还是写一写吧...
突然发现不用这个屮艸芔茻定理...爽!
观察一波,发现是某个完全联通图...生成树的性质是n个点n-1条边...
看这个图我们可以很容易(个屁)地发现,我们只要在n-1个五边形里删除1条边,再第1个五边形你删除2条边就可以生成树了
首先删掉2条边的五边形一共有n种选择...然后我们又可以发现,2条边里面肯定有一条在中间的n边形中...然后五边形中剩余的4条边里取一条和它组合那就有4种情况啦,所以删除两条边的一共有4n种情况
然后删除1条边的就有n-1个啦...每个五边形中有五种情况...n-1个就是5^(n-1)种搭配情况啦即C(5*(n-1),n-1);
于是答案就是4*n+5^(n-1)...
证毕,博主卒...
第一次一次过...
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
#define mod 2007
#define ll long long
ll read()
{
ll 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;
}
ll pow_mod(ll a,ll b){
a=a%mod;
ll ans=1;
while(b){
if(b&1) ans=ans*a%mod,b--;
b>>=1;
a=a*a%mod;
}
return ans;
}
int main(){
ll t=read();
while(t--){
ll n=read();
printf("%lld\n",4*n%mod*pow_mod(5,n-1)%mod);
}
}
我的推理好菜啊...我好菜啊QAQ
2017-07-25 23:24:
标签:span 一个 line lap www cto -- ext div
原文地址:http://www.cnblogs.com/Jrzn/p/7237123.html