其他分享
首页 > 其他分享> > 1744 被盗的食物

1744 被盗的食物

作者:互联网

羊村的羊们为了过冬,他们要在夏天的时候存储一些食物。等到冬天时拿出来吃。他们把食物包装成1×1×1的小方块,以便存储和取出来食用。经过了一个夏天后,小羊们存储了A·B·C块食物。他们把食物放到一个长方体的小屋里,A层高,每层有B行,每行有C块食物。
在秋天过后,村长来到小屋,要打开门分发食物了。但是,很不幸,小屋的四周都散落着食物块。经过查证,小偷们从小屋的顶层,前面,后面,和侧面都偷走了一个面的食物,一个面的食物指的是紧贴着某个面食物。所以剩下只有
(A−1)×(B−2)×(C−2)
(A−1)×(B−2)×(C−2)
块食物。为了隐藏罪证,小偷们把剩下的食物块,全部打乱,散落在小屋的四周。所以村长忘记了原来A,B,C到底是多少。
现在给定n,表示剩下的食物数量。计算可能最小和最大被偷走的食物数量。
样例解释:
在样例中,如果原来的数量为32=2×4×4,现在的数量是4=(2-1)×(4-2)×(4-2),则被偷走的是32-4=28块。
如果原来的数量为45=5×3×3,现在的数量是4=(5-1)×(3-2)×(3-2),则被偷走的是45-4=41块。
输入
单组测试数据。
第一行一个整数n(1≤n≤10^9)代表剩下的食物块。
输出
共一行,两个整数用空格隔开,第一个表示最小可能被偷的食物的数量,第二个表示最多可能被偷的食物的数量。
输入样例

4
输出样例
28 41
先暴力找规律,发现最大为8*n+9
最小找不出来,但可以发现a,b和n比起来都很小,可以试范围

#include<bits/stdc++.h>
using namespace std;
int main()
{
 ios::sync_with_stdio(false);
 long long n,minn;
 cin>>n;
 if(n==1) 
 {
  cout<<"17 17";return 0;
 }
 minn=0x3f3f3f3f3f;///long long 比大小这里一定要注意!!他会大于4个3f 
 for(long long a=2;a<=1000;a++)
 {
  for(long long b=3;b<=20000;b++)
  {
    long long tmp=(a-1)*(b-2);
	if(tmp>0&&n%tmp==0)
	{
	  long long c=n/tmp+2;
	  tmp=a*b*c-n;
      minn=min(minn,tmp);
	}	
  }
 }
 cout<<minn<<" "<<8*n+9;
 return 0;
} 

标签:tmp,样例,long,被盗,食物,偷走,1744,数量
来源: https://blog.csdn.net/weixin_43540515/article/details/100732401