| ||||||||||
| 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 | |||||||||
测了几乎所有的数据,In Reply To:我的程序怎么会wa!!!!!!!!,北大的大牛们看看!!! Posted by:qmczcn at 2004-11-24 21:20:25 > #include <iostream.h>
> #include <stdio.h>
> #include <math.h>
>
> _int64 n ;
>
> long total=0;
> _int64 counter;
> long ans;
>
> long a[10000];
> long dd[10000];
>
> long i , j , k ;
>
>
> bool could (long d)
> {
> _int64 a, b , c;
> if ((6*n) % d !=0) return false;
>
> _int64 k;
> k = (6*n) / d;
>
> a=6; b=(6*d+6); c=(2*d*d+3*d+1-k);
>
> if (b*b<4*a*c) return false;
>
> ans = long ((-b+sqrt(b*b-4*a*c))/2/a);
> if (a*ans*ans+b*ans+c==0) return true;
>
> return false;
> }
>
> void out()
> {
>
> printf("%ld\n",total);
> for (i=total; i>=1; i--)
> {
> printf("%ld ",dd[i]);
> for (j=1;j<=dd[i]-1; j++)
> {printf("%ld ",a[i]+j);}
> printf("%ld\n" , a[i]+dd[i]);
> }
> }
>
> void work()
> {
> long d;
> _int64 k;
> counter=0;
> total=0;
> for (d=1; (counter<=n-d*d) ; d++)
> {
> if (could(d))
> {
> total++ ;
> a[total]=ans;
> dd[total]=d;
> }
> k=d;
> counter=counter+k*k;
> }
>
>
> //printf("%d\n",d);
> // if (total>2)
> out();
> }
>
> int main()
> {
> scanf("%I64d",&n);
> // for (n=800000; n<=1000000; n++)
> {work();}
>
> return 0;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator