1005: [HNOI2008]明明的烦恼 - #include <Seter> - using namespace Orz;
1005: [HNOI2008]明明的烦恼
http://www.zybbs.org/JudgeOnline/problem.php?id=1005
| RunID | User | Problem | Result | Memory | Time | Language | Code Length | Submit Time |
| 141673 | Seter | 1005 | Accepted | 756 kb | 28 ms | C/Edit | 885 B | 2011-08-12 21:15:51 |
这个题是裸的Pru(点点)ferCode……第一眼看过去就知道了……但是要写个高精度……不用longlong的话压6位还是可以的
就是用1~n填充n-2个空,对于确定度数x的点必须恰好出现x-1次C(n,x-1)//n是在变的。最后不缺定度数的x个点再填充剩下的y个空x^y。全部乘起来。
#include <stdio.h>
int ans[500],s=499;
main(){
int n,i,t,j,k,m,l,a;
scanf("%d",&n);
l=a=n;
ans[499]=1;
for(i=0;i<a;i++){
scanf("%d",&t);
if(--t==-2)continue;
for(m=j=0;j<t;j++){
for(k=499;k>=s;k--){
ans[k]=ans[k]*(n-2-j)+m;
m=ans[k]/1000000;
ans[k]%=1000000;
}while(m){
ans[--s]=m%1000000;
m/=1000000;
}
}for(j=2;j<=t;j++){
m=0;
for(k=s;k<500;k++){
ans[k]+=m*1000000;
m=ans[k]%j;
ans[k]/=j;
}while(!ans[s])s++;
}n-=t;l--;
}n-=2;
while(n--){
m=0;
for(k=499;k>=s;k--){
ans[k]=ans[k]*l+m;
m=ans[k]/1000000;
ans[k]%=1000000;
}while(m){
ans[--s]=m%1000000;
m/=1000000;
}
}printf("%d",ans[s]);
for(s++;s<500;s++)printf("%06d",ans[s]);
putchar(10);
return 0;
}
By Seter
评论 (0)