Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
RE的好厉害,帮忙看一下吧#include<stdio.h> #include<math.h> __int64 x[1000001]; __int64 sum[1000001],fact[1000001]; int prime[10000],p0[100000000],xp[100000000]; __int64 n,s,p,total,count,total1; bool isprime(int n) {int i;int m; if(n==1)return 0; m=(int)sqrt((double)n); for(i=2;i<=m;i++) if(n%i==0)break; if(i>m)return 1; else return 0; } void fenjie(int n) { int i,j,k,m; m=(int)sqrt((double)n); for(i=2;i<=n;i++) { if(n%i==0){p0[total1]=i;total1++;} } } void recur(int v0) { int i,j,k; for(x[v0]=0;x[v0]<total;x[v0]++) { sum[v0]=sum[v0-1]+xp[x[v0]]; fact[v0]=fact[v0-1]*xp[x[v0]]; if(count>=1)break; if(v0<n)recur(v0+1); else { if(sum[v0]==s&&fact[v0]==p) { count++; for(i=1;i<=v0;i++) printf("%d ",xp[x[i]]); printf("\n"); }//if }//else }//for } int main() { int i,j,k,m; int sum0; while(scanf("%I64d%I64d%I64d",&n,&s,&p)!=EOF) { if(p==0) { if(n==1) { if(s==0)printf("0\n"); else printf("No solution\n"); } else { for(i=1;i<n;i++) printf("0 "); printf("%I64d\n",s); } } else //p!=0 {total=0; if(p<0)m=-p; else m=p; k=isprime(m); if(k==1) { xp[total]=-1;xp[++total]=1; xp[++total]=m;xp[++total]=-m; total++; }//if else {total1=0; p0[total1]=1;total1++; if(m!=1) fenjie(m); //printf("%d\n",total1); for(i=0;i<total1;i++) { xp[total]=p0[i];xp[++total]=-p0[i];total++; } }//else // printf("%d\n",x[2]); /*for(i=0;i<total;i++) printf("%d ",xp[i]); printf("\n"); */ sum[0]=0;fact[0]=1;count=0; recur(1); if(count==0)printf("No solution\n"); }//else }//while }//main Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator