遍地橘子(湖南科技大学2014新生选拔赛)

来源:互联网 发布:良品铺子淘宝旗舰店 编辑:程序博客网 时间:2024/04/30 14:01

链接湖南科技大学新生选拔赛 1638
思路:将k,m,n的不同情况全部列出来,分情况讨论。情况较多,要细心。

#include <stdio.h>int main(){    int t,m,n,k;    scanf("%d",&t);    int ans,sum,x,y;    while(t--)    {        ans=0;        scanf("%d%d%d",&m,&n,&k);        sum=m*n;     //橘子树总数        if(m>n){x=m;y=n;}        else {x=n;y=m;}    //将m,n比较大小,以便于后续操作        if(k>sum)k=sum;   //如果k的总数大于橘子数总数,就将sum赋予k        if(k==0)ans=sum;        if(y==1)    //仅有一行的情况        {            if(x==1)ans=sum+k;            else if(x==2)ans=sum+2*k;            else if(k<(x-2))ans=sum+3*k;                 else ans=sum+3*(x-2)+2*(k-x+2);    //将情况分成去掉两端的和在两端的两种情况  下同        }        else if(y==2)        {            if(k<=(x-2)*2)ans=sum+4*k;            else ans=sum+4*(x-2)*2+(k-2*(x-2))*3;        }        else        {            if(k<=sum-4)            {                if(k<=(x-2)*(y-2))ans=sum+5*k;                else ans=sum+5*(x-2)*(y-2)+4*(k-(x-2)*(y-2));            }            else ans=sum+5*(x-2)*(y-2)+4*(sum-4-(x-2)*(y-2))+3*(k-sum+4);        }        printf("%d\n",ans);    }    return 0;}
0 0