Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

看书 lrj 的书

Posted by sunmoonstar at 2006-03-11 22:15:36
In Reply To:请高手帮忙看一下,跪求(题号1190-----生日蛋糕) Posted by:_wrong_answer_ at 2006-03-11 19:55:23
> 总是wrong answer,我用题目里的例子试了没问题
> /*********************************************************************/
> #include <stdio.h>
> #include <math.h>
> #include <stdlib.h>
> int   main(int argc,char** argv[])
> {
> 
> int n=100;
> scanf("%d",&n);
> int m=2;
> scanf("%d",&m);
> int maxr=(int)sqrt(n/m); //最下那层最小是m,r最大不会超过这个
> int maxh=n/m/m;          //同上
> long mulr=1;
> long mulh=1;
> for(int i=0;i<m;i++){
> mulr=mulr*(maxr-i);
> mulh=mulh*(maxh-i);}
> long i_m=1;
> for(i=0;i<m;i++)
> i_m=i_m*(i+1);
> mulr=mulr/i_m;        //mulr是1到maxr取m个数的种数
> mulh=mulh/i_m;         //同上
> int *rlist=new int[m];//存放各层的R
> int *hlist=new int[m];//同上
> for(i=0;i<m-1;i++)
> {
> rlist[m-1-i]=maxr-i;//rlist[m]是最底那层
> hlist[m-1-i]=maxh-i;//同上
> }
> 
> rlist[0]=maxr-m+2;  //因为从下面的可以看出,一开始的时候就要--,所以把最小那个先++
> hlist[0]=maxh-m+2;//  同上
> 
> long q=0;            //存放最终结果
> bool is=true;        //记录是否是找到的体积为n 的第一个s值,用处不大,但有用
> 
> for(i=0; i<mulr;i++){//rlist[]一共mulr种,与下面的hlist[]相乘,是所有r和h的种数,当然不保证体积为n
> 
> 
> rlist[0]--;          //下面的代码是从小到大依次尝试每个r,因为每层的r的关系有限制,所以要做必要的调整
> if(rlist[0]<1){
> 
> int k;
> for(k=0;k<m;k++)
> if(rlist[k]>k+1)break;
> if(k>=m)break;
> rlist[k]--;
> for(;k>0;k--){
> rlist[k-1]=rlist[k]-1;
> }
> }
> 
> for(int j=0;j<mulh;j++){          //在每个r中尝试每个h,同上,需要调整
> 
> hlist[0]--;
> if(hlist[0]<1){
> 
> int l;
> for(l=0;l<m;l++)
> if(hlist[l]>l+1)break;
> if(l>=m)break;
> hlist[l]--;
> for(;l>0;l--){
> hlist[l-1]=hlist[l]-1;
> }
> }
> long sum=0;        //看体积是否为n
> for(int t=0;t<m;t++){
> sum=rlist[t]*rlist[t]*hlist[t]+sum;}
> 
> if(sum==n){             //如果是的话
> long qe=rlist[m-1]*rlist[m-1];
> for(int t=0;t<m;t++)
> qe=rlist[t]*hlist[t]*2+qe;
> 
> if(is){q=qe;is=false;
> }
> else if(qe<q)q=qe;
> }
> }
> for(j=0;j<m-1;j++)
> hlist[m-1-j]=maxh-j;
> hlist[0]=maxh-m+2;
> }
> printf("%d\n",q);
> 
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator