| ||||||||||
| 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 | |||||||||
看书 lrj 的书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: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator