1005: [HNOI2008]明明的烦恼 - #include <Seter> - using namespace Orz;

1005: [HNOI2008]明明的烦恼

Seter posted @ 2011年8月12日 21:21 in BZOJ with tags HNOI Code HighPrecision , 3161 阅读

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

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter
Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee