链接湖南科技大学新生选拔赛 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;
}